mirror of https://github.com/apache/jclouds.git
Issue 36: reorganized and revamped codegen
git-svn-id: http://jclouds.googlecode.com/svn/trunk@1410 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
ecc067e119
commit
500cc335e8
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
|
||||
|
||||
====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to you under the Apache License, Version
|
||||
2.0 (the "License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0.html Unless required by
|
||||
applicable law or agreed to in writing, software distributed under the
|
||||
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
CONDITIONS OF ANY KIND, either express or implied. See the License for
|
||||
the specific language governing permissions and limitations under the
|
||||
License.
|
||||
====================================================================
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<artifactId>jclouds-codegen-project</artifactId>
|
||||
<groupId>org.jclouds</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<relativePath>../project/pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jclouds-codegen-ec2</artifactId>
|
||||
<name>jclouds code generator for amazon ec2</name>
|
||||
<packaging>jar</packaging>
|
||||
<description>jclouds code generator</description>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:http://jclouds.googlecode.com/svn/trunk/codegen/ec2</connection>
|
||||
<developerConnection>scm:svn:https://jclouds.googlecode.com/svn/trunk/codegen/ec2</developerConnection>
|
||||
<url>http://jclouds.googlecode.com/svn/trunk/codegen/ec2</url>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>jclouds-codegen-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>jclouds-codegen-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>test-jar</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,62 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class AmazonEC2QueryAPI {
|
||||
private Map<String, Category> categories;
|
||||
private Map<String, DataType> dataTypes;
|
||||
private Set<String> see;
|
||||
|
||||
public void setCategories(Map<String, Category> categories) {
|
||||
this.categories = categories;
|
||||
}
|
||||
|
||||
public Map<String, Category> getCategories() {
|
||||
return categories;
|
||||
}
|
||||
|
||||
public void setDataTypes(Map<String, DataType> dataTypes) {
|
||||
this.dataTypes = dataTypes;
|
||||
}
|
||||
|
||||
public Map<String, DataType> getDataTypes() {
|
||||
return dataTypes;
|
||||
}
|
||||
|
||||
public void setSee(Set<String> see) {
|
||||
this.see = see;
|
||||
}
|
||||
|
||||
public Set<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
|
||||
}
|
|
@ -21,46 +21,42 @@
|
|||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
package org.jclouds.codegen.ec2.queryapi;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author James Murty
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class Parameter {
|
||||
private String javaName;
|
||||
private String name;
|
||||
private String type;
|
||||
private String javaType;
|
||||
private String param;
|
||||
private String desc;
|
||||
public class Category {
|
||||
private Map<String, Query> queries;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append("Category");
|
||||
sb.append("{queries=").append(queries);
|
||||
sb.append(", name='").append(name).append('\'');
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String name;
|
||||
|
||||
public void setQueries(Map<String, Query> categories) {
|
||||
this.queries = categories;
|
||||
}
|
||||
|
||||
public Map<String, Query> getQueries() {
|
||||
return queries;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getJavaType() {
|
||||
return javaType;
|
||||
}
|
||||
|
||||
public String getParam() {
|
||||
return param;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setJavaName(String javaName) {
|
||||
this.javaName = javaName;
|
||||
}
|
||||
|
||||
public String getJavaName() {
|
||||
return javaName;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class Content {
|
||||
|
||||
private String constraints;
|
||||
private String defaultValue;
|
||||
private String desc;
|
||||
private Map<String, String> valueMap;
|
||||
private String name;
|
||||
private String optional;
|
||||
private String type;
|
||||
|
||||
public void setConstraints(String constraints) {
|
||||
this.constraints = constraints;
|
||||
}
|
||||
|
||||
public String getConstraints() {
|
||||
return constraints;
|
||||
}
|
||||
|
||||
public void setDefaultValue(String defaultValue) {
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public void setDesc(String desc) {
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setValueMap(Map<String, String> valueMap) {
|
||||
this.valueMap = valueMap;
|
||||
}
|
||||
|
||||
public Map<String, String> getValueMap() {
|
||||
return valueMap;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setOptional(String optional) {
|
||||
this.optional = optional;
|
||||
}
|
||||
|
||||
public String getOptional() {
|
||||
return optional;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class DataType {
|
||||
|
||||
private String type;
|
||||
private String ancestor;
|
||||
private Set<String> see;
|
||||
private String exampleCode;
|
||||
private String exampleHTML;
|
||||
private Set<Content> contents;
|
||||
|
||||
public DataType() {
|
||||
super();
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setAncestor(String ancestor) {
|
||||
this.ancestor = ancestor;
|
||||
}
|
||||
|
||||
public String getAncestor() {
|
||||
return ancestor;
|
||||
}
|
||||
|
||||
public void setSee(Set<String> see) {
|
||||
this.see = see;
|
||||
}
|
||||
|
||||
public Set<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
|
||||
public void setExampleCode(String exampleCode) {
|
||||
this.exampleCode = exampleCode;
|
||||
}
|
||||
|
||||
public String getExampleCode() {
|
||||
return exampleCode;
|
||||
}
|
||||
|
||||
public void setContents(Set<Content> contents) {
|
||||
this.contents = contents;
|
||||
}
|
||||
|
||||
public Set<Content> getContents() {
|
||||
return contents;
|
||||
}
|
||||
|
||||
public void setExampleHTML(String exampleHTML) {
|
||||
this.exampleHTML = exampleHTML;
|
||||
}
|
||||
|
||||
public String getExampleHTML() {
|
||||
return exampleHTML;
|
||||
}
|
||||
|
||||
}
|
|
@ -21,25 +21,31 @@
|
|||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
package org.jclouds.codegen.ec2.queryapi;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author James Murty
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class Response extends BaseBean {
|
||||
private List<ResponseField> fields;
|
||||
private List<String> see;
|
||||
|
||||
public List<ResponseField> getFields() {
|
||||
return fields;
|
||||
}
|
||||
public class Query extends DataType {
|
||||
|
||||
|
||||
public List<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
|
||||
private String responseType;
|
||||
private String description;
|
||||
|
||||
public void setResponseType(String responseType) {
|
||||
this.responseType = responseType;
|
||||
}
|
||||
|
||||
public String getResponseType() {
|
||||
return responseType;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,283 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi.parser;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.testng.v6.Sets;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
public class AmazonEC2QueryAPIExpectations {
|
||||
protected final Set<String> queryNames;
|
||||
|
||||
public AmazonEC2QueryAPIExpectations() {
|
||||
queryNames = Sets.newHashSet();
|
||||
for (Set<String> qNames : expectedQueryNamesForCategoryName.values()) {
|
||||
queryNames.addAll(qNames);
|
||||
}
|
||||
}
|
||||
|
||||
// Please do not reformat this class, as it will not likely look as nice.
|
||||
protected static final Map<String, Set<String>> expectedQueryNamesForCategoryName = new ImmutableMap.Builder<String, Set<String>>()
|
||||
.put("Amazon DevPay", ImmutableSet.of("ConfirmProductInstance")).put(
|
||||
"AMIs",
|
||||
ImmutableSet.of("DeregisterImage", "ModifyImageAttribute",
|
||||
"DescribeImageAttribute", "DescribeImages")).put(
|
||||
"Availability Zones and Regions",
|
||||
ImmutableSet.of("DescribeAvailabilityZones", "DescribeRegions")).put(
|
||||
"Elastic Block Store",
|
||||
ImmutableSet.of("DeleteVolume", "DescribeSnapshots", "DescribeVolumes",
|
||||
"DetachVolume", "AttachVolume", "CreateSnapshot", "CreateVolume",
|
||||
"DeleteSnapshot")).put(
|
||||
"Elastic IP Addresses",
|
||||
ImmutableSet.of("AllocateAddress", "DisassociateAddress", "ReleaseAddress",
|
||||
"AssociateAddress", "DescribeAddresses")).put("General",
|
||||
ImmutableSet.of("GetConsoleOutput")).put("Images",
|
||||
ImmutableSet.of("ResetImageAttribute", "RegisterImage")).put(
|
||||
"Instances",
|
||||
ImmutableSet.of("TerminateInstances", "DescribeInstances", "RunInstances",
|
||||
"RebootInstances")).put("Key Pairs",
|
||||
ImmutableSet.of("DescribeKeyPairs", "CreateKeyPair", "DeleteKeyPair")).put(
|
||||
"Monitoring", ImmutableSet.of("MonitorInstances", "UnmonitorInstances")).put(
|
||||
"Reserved Instances",
|
||||
ImmutableSet.of("DescribeReservedInstances",
|
||||
"DescribeReservedInstancesOfferings",
|
||||
"PurchaseReservedInstancesOffering")).put(
|
||||
"Security Groups",
|
||||
ImmutableSet.of("DescribeSecurityGroups", "AuthorizeSecurityGroupIngress",
|
||||
"CreateSecurityGroup", "DeleteSecurityGroup",
|
||||
"RevokeSecurityGroupIngress")).put("Windows",
|
||||
ImmutableSet.of("CancelBundleTask", "DescribeBundleTasks", "BundleInstance"))
|
||||
.build();
|
||||
protected static final Map<String, Set<String>> expectedFieldNamesForDataTypeName = new ImmutableMap.Builder<String, Set<String>>()
|
||||
.put("ReservationSetType", ImmutableSet.of("item")).put("DeleteKeyPairResponse",
|
||||
ImmutableSet.of("return", "requestId")).put(
|
||||
"DescribeKeyPairsResponseInfoType", ImmutableSet.of("item")).put(
|
||||
"AuthorizeSecurityGroupIngressResponse",
|
||||
ImmutableSet.of("return", "requestId")).put("AttachmentSetItemResponseType",
|
||||
ImmutableSet.of("device", "status", "volumeId", "instanceId", "attachTime"))
|
||||
.put("DescribeAddressesResponseInfoType", ImmutableSet.of("item")).put(
|
||||
"DescribeReservedInstancesResponse",
|
||||
ImmutableSet.of("requestId", "reservedInstancesSet")).put(
|
||||
"DescribeVolumesSetItemResponseType",
|
||||
ImmutableSet.of("status", "size", "createTime", "snapshotId",
|
||||
"availabilityZone", "volumeId", "attachmentSet")).put(
|
||||
"LaunchPermissionItemType", ImmutableSet.of("group", "userId")).put(
|
||||
"DescribeSnapshotsSetItemResponseType",
|
||||
ImmutableSet.of("status", "snapshotId", "volumeId", "startTime", "progress"))
|
||||
.put(
|
||||
"RunningInstancesItemType",
|
||||
ImmutableSet.of("dnsName", "instanceState", "launchTime", "privateDnsName",
|
||||
"reason", "monitoring", "platform", "productCodes", "amiLaunchIndex",
|
||||
"keyName", "ramdiskId", "kernelId", "imageId", "instanceType",
|
||||
"instanceId", "placement")).put(
|
||||
"DescribeReservedInstancesOfferingsResponse",
|
||||
ImmutableSet.of("requestId", "reservedInstancesOfferingsSet")).put(
|
||||
"BlockDeviceMappingType", ImmutableSet.of("item")).put(
|
||||
"ResetImageAttributeResponse", ImmutableSet.of("requestId", "imageId")).put(
|
||||
"AvailabilityZoneSetType", ImmutableSet.of("item")).put(
|
||||
"RevokeSecurityGroupIngressResponse", ImmutableSet.of("return", "requestId"))
|
||||
.put("ReservationInfoType",
|
||||
ImmutableSet.of("groupSet", "reservationId", "instancesSet", "ownerId")).put(
|
||||
"RebootInstancesResponse", ImmutableSet.of("return", "requestId")).put(
|
||||
"GroupItemType", ImmutableSet.of("groupId")).put("AvailabilityZoneItemType",
|
||||
ImmutableSet.of("regionName", "zoneName", "zoneState")).put(
|
||||
"RunningInstancesSetType", ImmutableSet.of("item")).put(
|
||||
"CreateSecurityGroupResponse", ImmutableSet.of("return", "requestId")).put(
|
||||
"ReleaseAddressResponse", ImmutableSet.of("return", "requestId")).put(
|
||||
"SecurityGroupItemType",
|
||||
ImmutableSet.of("groupName", "ipPermissions", "groupDescription", "ownerId"))
|
||||
.put("NullableAttributeValueType", ImmutableSet.of("value")).put(
|
||||
"DescribeSnapshotsResponse", ImmutableSet.of("requestId", "snapshotSet")).put(
|
||||
"BundleInstanceResponse", ImmutableSet.of("bundleInstanceTask", "requestId"))
|
||||
.put("DescribeKeyPairsResponseItemType", ImmutableSet.of("keyName", "keyFingerprint"))
|
||||
.put("BundleInstanceTasksSetType", ImmutableSet.of("bundleInstanceTask"))
|
||||
.put("DescribeAddressesResponseItemType", ImmutableSet.of("publicIp", "instanceId"))
|
||||
.put("MonitorInstancesResponse", ImmutableSet.of("requestId", "instancesSet")).put(
|
||||
"DescribeImagesResponse", ImmutableSet.of("imagesSet", "requestId")).put(
|
||||
"MonitorInstancesResponseSetItemType",
|
||||
ImmutableSet.of("monitoring", "instanceId")).put(
|
||||
"BundleInstanceTaskErrorType", ImmutableSet.of("code", "message")).put(
|
||||
"ProductCodesSetType", ImmutableSet.of("item")).put(
|
||||
"UnmonitorInstancesResponse", ImmutableSet.of("instancesSet", "requestId"))
|
||||
.put(
|
||||
"IpPermissionType",
|
||||
ImmutableSet.of("groups", "portRange", "fromPort", "ipProtocol", "icmpPort",
|
||||
"toPort", "ipRanges")).put("IpPermissionSetType",
|
||||
ImmutableSet.of("item")).put("DeleteSecurityGroupResponse",
|
||||
ImmutableSet.of("requestId", "return")).put(
|
||||
"RunInstancesResponse",
|
||||
ImmutableSet.of("instancesSet", "requesterId", "groupSet", "reservationId",
|
||||
"requestId", "ownerId")).put("DeregisterImageResponse",
|
||||
ImmutableSet.of("return", "requestId")).put("TerminateInstancesResponse",
|
||||
ImmutableSet.of("requestId", "instancesSet")).put(
|
||||
"DescribeSnapshotsSetResponseType", ImmutableSet.of("item")).put(
|
||||
"DescribeReservedInstancesOfferingsResponseSetType", ImmutableSet.of("item"))
|
||||
.put(
|
||||
"BundleInstanceTaskType",
|
||||
ImmutableSet.of("updateTime", "startTime", "progress", "instanceId", "state",
|
||||
"bundleId", "storage", "error")).put(
|
||||
"ConfirmProductInstanceResponse",
|
||||
ImmutableSet.of("ownerId", "requestId", "return")).put(
|
||||
"CreateKeyPairResponse",
|
||||
ImmutableSet.of("keyName", "keyMaterial", "requestId", "keyFingerprint")).put(
|
||||
"RegisterImageResponse", ImmutableSet.of("imageId", "requestId")).put(
|
||||
"IpRangeSetType", ImmutableSet.of("item")).put("RegionSetType",
|
||||
ImmutableSet.of("item")).put("InstanceStateType",
|
||||
ImmutableSet.of("name", "code")).put(
|
||||
"DescribeReservedInstancesOfferingsResponseSetItemType",
|
||||
ImmutableSet.of("productDescription", "reservedInstancesOfferingId",
|
||||
"usagePrice", "fixedPrice", "availabilityZone", "duration",
|
||||
"instanceType")).put(
|
||||
"BundleInstanceS3StorageType",
|
||||
ImmutableSet.of("awsAccessKeyId", "uploadPolicy", "secret-access-key",
|
||||
"bucket", "prefix", "uploadPolicySignature")).put(
|
||||
"DescribeVolumesResponse", ImmutableSet.of("requestId", "volumeSet")).put(
|
||||
"TerminateInstancesResponseInfoType", ImmutableSet.of("item")).put(
|
||||
"DeleteSnapshotResponse", ImmutableSet.of("return", "requestId")).put(
|
||||
"BundleInstanceTaskStorageType", ImmutableSet.of("S3")).put(
|
||||
"DescribeAvailabilityZonesResponse",
|
||||
ImmutableSet.of("requestId", "availabilityZoneInfo")).put(
|
||||
"CreateVolumeResponse",
|
||||
ImmutableSet.of("snapshotId", "size", "volumeId", "availabilityZone",
|
||||
"requestId", "createTime", "status")).put(
|
||||
"DescribeReservedInstancesResponseSetType", ImmutableSet.of("item")).put(
|
||||
"DescribeAddressesResponse", ImmutableSet.of("requestId", "addressesSet"))
|
||||
.put("InstanceMonitoringStateType", ImmutableSet.of("state")).put(
|
||||
"DetachVolumeResponse",
|
||||
ImmutableSet.of("status", "requestId", "instanceId", "volumeId", "device",
|
||||
"attachTime")).put("DescribeKeyPairsResponse",
|
||||
ImmutableSet.of("requestId", "keySet")).put(
|
||||
"AttachVolumeResponse",
|
||||
ImmutableSet.of("device", "attachTime", "requestId", "volumeId", "status",
|
||||
"instanceId")).put("DescribeBundleTasksResponse",
|
||||
ImmutableSet.of("bundleInstanceTasksSet", "requestId")).put(
|
||||
"TerminateInstancesResponseItemType",
|
||||
ImmutableSet.of("shutdownState", "previousState", "instanceId")).put(
|
||||
"SecurityGroupSetType", ImmutableSet.of("item")).put(
|
||||
"AttachmentSetResponseType", ImmutableSet.of("item")).put(
|
||||
"DescribeImageAttributeResponse",
|
||||
ImmutableSet.of("kernel", "productCodes", "requestId", "ramdisk",
|
||||
"launchPermission", "blockDeviceMapping", "imageId")).put(
|
||||
"PurchaseReservedInstancesOfferingResponse",
|
||||
ImmutableSet.of("reservedInstancesId", "requestId")).put(
|
||||
"CreateSnapshotResponse",
|
||||
ImmutableSet.of("requestId", "status", "startTime", "volumeId", "snapshotId",
|
||||
"progress")).put("GroupSetType", ImmutableSet.of("item")).put(
|
||||
"ProductCodesSetItemType", ImmutableSet.of("productCode")).put(
|
||||
"AllocateAddressResponse", ImmutableSet.of("requestId", "publicIp")).put(
|
||||
"ProductCodeItemType", ImmutableSet.of("productCode")).put(
|
||||
"UserIdGroupPairType", ImmutableSet.of("userId", "groupName ")).put(
|
||||
"DescribeVolumesSetResponseType", ImmutableSet.of("item")).put(
|
||||
"ProductCodeListType", ImmutableSet.of("item")).put("DescribeRegionsResponse",
|
||||
ImmutableSet.of("requestId", "regionInfo")).put("RegionItemType",
|
||||
ImmutableSet.of("regionEndpoint", "regionName")).put(
|
||||
"DescribeInstancesResponse", ImmutableSet.of("requestId", "reservationSet"))
|
||||
.put(
|
||||
"DescribeImagesResponseItemType",
|
||||
ImmutableSet.of("kernelId", "productCodes", "isPublic", "imageId",
|
||||
"ramdiskId", "imageOwnerId", "platform", "imageType", "imageState",
|
||||
"imageLocation", "architecture")).put("LaunchPermissionListType",
|
||||
ImmutableSet.of("item")).put("BlockDeviceMappingItemType",
|
||||
ImmutableSet.of("virtualName", "deviceName")).put("DeleteVolumeResponse",
|
||||
ImmutableSet.of("return", "requestId")).put("DescribeImagesResponseInfoType",
|
||||
ImmutableSet.of("item")).put("IpRangeItemType", ImmutableSet.of("cidrIp "))
|
||||
.put("DisassociateAddressResponse", ImmutableSet.of("requestId", "return")).put(
|
||||
"UserIdGroupPairSetType", ImmutableSet.of("item"))
|
||||
.put("CancelBundleTaskResponse", ImmutableSet.of("bundleInstanceTask", "requestId"))
|
||||
.put("MonitorInstancesResponseSetType", ImmutableSet.of("item")).put(
|
||||
"DescribeReservedInstancesResponseSetItemType",
|
||||
ImmutableSet.of("state", "duration", "usagePrice", "instanceType",
|
||||
"instanceCount", "productDescription", "reservedInstancesId",
|
||||
"fixedPrice", "availabilityZone", "start")).put(
|
||||
"DescribeSecurityGroupsResponse",
|
||||
ImmutableSet.of("requestId", "securityGroupInfo")).put(
|
||||
"GetConsoleOutputResponse",
|
||||
ImmutableSet.of("requestId", "output", "instanceId", "timestamp")).put(
|
||||
"ModifyImageAttributeResponse", ImmutableSet.of("requestId", "return"))
|
||||
.put("AssociateAddressResponse", ImmutableSet.of("requestId", "publicIp", "return"))
|
||||
.put("ConfirmProductInstance", ImmutableSet.of("ProductCode", "InstanceId")).put(
|
||||
"DeregisterImage", ImmutableSet.of("ImageId")).put(
|
||||
"ModifyImageAttribute",
|
||||
ImmutableSet.of("Group.n", "UserId.n", "ImageId", "ProductCode.n", "Group.n",
|
||||
"UserId.n")).put(
|
||||
"DescribeImageAttribute",
|
||||
ImmutableSet.of("ProductCodes", "ImageId", "Platform", "BlockDeviceMapping",
|
||||
"LaunchPermission", "Ramdisk", "Kernel")).put("DescribeImages",
|
||||
ImmutableSet.of("explicit", "public", "implicit")).put(
|
||||
"DescribeAvailabilityZones", ImmutableSet.of("ZoneName")).put(
|
||||
"DescribeRegions", ImmutableSet.of("Region.n")).put("DeleteVolume",
|
||||
ImmutableSet.of("VolumeId")).put("DescribeSnapshots",
|
||||
ImmutableSet.of("SnapshotId.n")).put("DescribeVolumes",
|
||||
ImmutableSet.of("VolumeId")).put("DetachVolume",
|
||||
ImmutableSet.of("Device", "VolumeId", "InstanceId", "Force")).put(
|
||||
"AttachVolume", ImmutableSet.of("InstanceId", "Device", "VolumeId")).put(
|
||||
"CreateSnapshot", ImmutableSet.of("VolumeId")).put("CreateVolume",
|
||||
ImmutableSet.of("SnapshotId", "Size", "AvailabilityZone")).put(
|
||||
"DeleteSnapshot", ImmutableSet.of("SnapshotId")).put("AllocateAddress",
|
||||
ImmutableSet.of("AllocateAddressResponse", "requestId", "publicIp")).put(
|
||||
"DisassociateAddress", ImmutableSet.of("PublicIp")).put("ReleaseAddress",
|
||||
ImmutableSet.of("PublicIp")).put("AssociateAddress",
|
||||
ImmutableSet.of("InstanceId", "PublicIp")).put("DescribeAddresses",
|
||||
ImmutableSet.of("PublicIp.n")).put("GetConsoleOutput",
|
||||
ImmutableSet.of("InstanceId")).put("ResetImageAttribute",
|
||||
ImmutableSet.of("ImageId")).put("RegisterImage",
|
||||
ImmutableSet.of("ImageLocation")).put("TerminateInstances",
|
||||
ImmutableSet.of("InstanceId.n")).put("DescribeInstances",
|
||||
ImmutableSet.of("InstanceId.n")).put(
|
||||
"RunInstances",
|
||||
ImmutableSet.of("Monitoring.Enabled", "Encoding", "AvailabilityZone",
|
||||
"KernelId", "MaxCount", "Data", "ImageId", "InstanceType",
|
||||
"MinCount", "groupId", "VirtualName", "AddressingType", "KeyName",
|
||||
"DeviceName", "Version", "RamdiskId")).put("RebootInstances",
|
||||
ImmutableSet.of("InstanceId.n")).put("DescribeKeyPairs",
|
||||
ImmutableSet.of("KeyName.n")).put("CreateKeyPair", ImmutableSet.of("KeyName"))
|
||||
.put("DeleteKeyPair", ImmutableSet.of("KeyName")).put("MonitorInstances",
|
||||
ImmutableSet.of("InstanceId.n")).put("UnmonitorInstances",
|
||||
ImmutableSet.of("InstanceId.n")).put("DescribeReservedInstances",
|
||||
ImmutableSet.of("ReservedInstancesId.n")).put(
|
||||
"DescribeReservedInstancesOfferings",
|
||||
ImmutableSet.of("ProductDescription", "ReservedInstancesOfferingId",
|
||||
"AvailabilityZone", "InstanceType")).put(
|
||||
"PurchaseReservedInstancesOffering",
|
||||
ImmutableSet.of("ReservedInstancesOfferingId.n", "InstanceCount.n")).put(
|
||||
"DescribeSecurityGroups", ImmutableSet.of("GroupName.n")).put(
|
||||
"AuthorizeSecurityGroupIngress",
|
||||
ImmutableSet.of("GroupName", "GroupName", "UserId", "IpProtocol", "CidrIp",
|
||||
"ToPort", "FromPort", "UserId")).put("CreateSecurityGroup",
|
||||
ImmutableSet.of("GroupDescription", "GroupName")).put("DeleteSecurityGroup",
|
||||
ImmutableSet.of("GroupName")).put(
|
||||
"RevokeSecurityGroupIngress",
|
||||
ImmutableSet.of("IpProtocol", "GroupName", "UserId", "CidrIp", "FromPort",
|
||||
"ToPort", "GroupName", "UserId")).put("CancelBundleTask",
|
||||
ImmutableSet.of("BundleId")).put("DescribeBundleTasks",
|
||||
ImmutableSet.of("BundleId")).put(
|
||||
"BundleInstance",
|
||||
ImmutableSet.of("Storage.S3.UploadPolicy", "InstanceId", "Storage.S3.Prefix",
|
||||
"Storage.S3.AWSAccessKeyId", "Storage.S3.Bucket",
|
||||
"Storage.S3.UploadPolicySignature")).build();
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi.parser;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.jclouds.codegen.ec2.queryapi.AmazonEC2QueryAPI;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
/**
|
||||
* Converts object models representing AWS API beans into Java classes.
|
||||
* <p>
|
||||
* This implementation is designed to perform the following steps:
|
||||
* <ul>
|
||||
* <li>Parse the JSON object representation produced by the <tt>parse_ec2.pl</tt> perl script</li>
|
||||
* <li>Convert the JSON into Java object models (@see org.jclouds.aws.codegen.models)</li>
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class AmazonEC2QueryAPIParser {
|
||||
|
||||
public AmazonEC2QueryAPI parseJSONResource(String resource) {
|
||||
InputStream in = AmazonEC2QueryAPI.class.getResourceAsStream(resource);
|
||||
return parseJSONInputStream(in);
|
||||
}
|
||||
|
||||
public AmazonEC2QueryAPI parseJSONFile(File file) throws FileNotFoundException {
|
||||
InputStream in = new FileInputStream(file);
|
||||
return parseJSONInputStream(in);
|
||||
}
|
||||
|
||||
public AmazonEC2QueryAPI parseJSONInputStream(InputStream in) {
|
||||
assert in != null;
|
||||
Gson gson = new Gson();
|
||||
try {
|
||||
AmazonEC2QueryAPIValidator validator = new AmazonEC2QueryAPIValidator();
|
||||
validator.setModel(gson.fromJson(new InputStreamReader(in), AmazonEC2QueryAPI.class));
|
||||
validator.validateCategories().validateCommands().validateDomain();
|
||||
return validator.getModel();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(in);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,131 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi.parser;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.codegen.ec2.queryapi.AmazonEC2QueryAPI;
|
||||
import org.jclouds.codegen.ec2.queryapi.Category;
|
||||
import org.jclouds.codegen.ec2.queryapi.Content;
|
||||
import org.jclouds.codegen.ec2.queryapi.DataType;
|
||||
import org.jclouds.codegen.ec2.queryapi.Query;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
public class AmazonEC2QueryAPIValidator extends AmazonEC2QueryAPIExpectations {
|
||||
protected AmazonEC2QueryAPIValidator validateQueriesInCategory(String categoryName) {
|
||||
for (String query : expectedQueryNamesForCategoryName.get(categoryName)) {
|
||||
validateQueryInCategory(query, categoryName);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
protected AmazonEC2QueryAPIValidator validateQueryInCategory(String queryName,
|
||||
String categoryName) {
|
||||
Category category = getModel().getCategories().get(categoryName);
|
||||
checkState(category != null, String.format("category %1$s not present", categoryName));
|
||||
Query query = category.getQueries().get(queryName);
|
||||
validateTopLevelType(query);
|
||||
checkState(category != null, String.format("query %1$s not present in category %2$s",
|
||||
queryName, categoryName));
|
||||
checkState(query.getResponseType().equals(query.getType() + "Response"), String.format(
|
||||
"Invalid responseType for %1$s [%2$s] should be %1$sResponse", queryName, query
|
||||
.getResponseType()));
|
||||
checkNotNull(query.getDescription(), String.format("%1$s: getDescription()", query.getType()));
|
||||
|
||||
validateTopLevelType(query);
|
||||
|
||||
DataType response = getModel().getDataTypes().get(query.getResponseType());
|
||||
checkNotNull(response, String.format("response %1$s not present in domain for %2$s", query
|
||||
.getResponseType(), query.getType()));
|
||||
checkState(query.getResponseType().equals(query.getType() + "Response"));
|
||||
checkState(response.getType().equals(query.getType() + "Response"));
|
||||
validateTopLevelType(response);
|
||||
return validateDataType(query);
|
||||
}
|
||||
|
||||
protected void validateTopLevelType(DataType type) {
|
||||
checkState(type.getAncestor() == null, String
|
||||
.format("%1$s should not have an ancestor", type));
|
||||
checkNotNull(type.getExampleCode(), String.format("%1$s: getExampleCode()", type.getType()));
|
||||
checkNotNull(type.getExampleHTML(), String.format("%1$s: getExampleHTML()", type.getType()));
|
||||
}
|
||||
|
||||
protected AmazonEC2QueryAPIValidator validateDataType(DataType dataType) {
|
||||
checkState(dataType.getSee().size() >= 1, "see should have at least one entry");
|
||||
Set<String> fieldNames = Sets.newTreeSet(Iterables.transform(dataType.getContents(),
|
||||
new Function<Content, String>() {
|
||||
public String apply(Content field) {
|
||||
return field.getName();
|
||||
}
|
||||
}));
|
||||
checkState(Sets.difference(fieldNames,
|
||||
expectedFieldNamesForDataTypeName.get(dataType.getType())).size() == 0, String
|
||||
.format("%1$s hasn't the correct fields. has [%2$s] should have [%3$s]", dataType
|
||||
.getType(), fieldNames, expectedFieldNamesForDataTypeName.get(dataType
|
||||
.getType())));
|
||||
return this;
|
||||
}
|
||||
|
||||
private AmazonEC2QueryAPI model;
|
||||
|
||||
public AmazonEC2QueryAPIValidator validateCommands() {
|
||||
for (String categoryName : expectedQueryNamesForCategoryName.keySet()) {
|
||||
for (String queryName : expectedQueryNamesForCategoryName.get(categoryName)) {
|
||||
validateQueryInCategory(queryName, categoryName);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public AmazonEC2QueryAPIValidator validateDomain() {
|
||||
for (String dataTypeName : expectedFieldNamesForDataTypeName.keySet()) {
|
||||
if (!this.queryNames.contains(dataTypeName))
|
||||
validateDataType(checkNotNull(getModel().getDataTypes().get(dataTypeName), dataTypeName));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public AmazonEC2QueryAPIValidator validateCategories() {
|
||||
checkState(Sets.difference(getModel().getCategories().keySet(),
|
||||
expectedQueryNamesForCategoryName.keySet()).size() == 0);
|
||||
checkState(getModel().getCategories().keySet().size() == expectedQueryNamesForCategoryName
|
||||
.keySet().size());
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setModel(AmazonEC2QueryAPI model) {
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
public AmazonEC2QueryAPI getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
}
|
|
@ -21,41 +21,28 @@
|
|||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
package org.jclouds.codegen.ec2.queryapi.transform;
|
||||
|
||||
import org.jclouds.codegen.ec2.queryapi.AmazonEC2QueryAPI;
|
||||
import org.jclouds.codegen.model.API;
|
||||
|
||||
/**
|
||||
* Converts object models representing AWS API beans into Java classes.
|
||||
* <p>
|
||||
* This implementation is designed to perform the following steps:
|
||||
* <ul>
|
||||
* <li>Parse the JSON object representation produced by the <tt>parse_ec2.pl</tt> perl script</li>
|
||||
* <li>Convert the JSON into Java object models (@see org.jclouds.aws.codegen.models)</li>
|
||||
*
|
||||
* @author James Murty
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public abstract class BaseBean {
|
||||
private String className;
|
||||
private String packageName;
|
||||
private String awsType;
|
||||
private String javaType;
|
||||
private String javaName;
|
||||
public class AmazonEC2QueryAPITransformer {
|
||||
|
||||
public String getJavaType() {
|
||||
return javaType;
|
||||
}
|
||||
public API transform(AmazonEC2QueryAPI amazonAPI) {
|
||||
API api = new API();
|
||||
|
||||
public String getClassName() {
|
||||
return className;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
}
|
||||
|
||||
public String getAwsType() {
|
||||
return awsType;
|
||||
}
|
||||
|
||||
public void setJavaName(String javaName) {
|
||||
this.javaName = javaName;
|
||||
return api;
|
||||
}
|
||||
|
||||
public String getJavaName() {
|
||||
return javaName;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi.transform;
|
||||
|
||||
import org.jclouds.codegen.ec2.queryapi.Content;
|
||||
import org.jclouds.codegen.model.Field;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Function;
|
||||
|
||||
/**
|
||||
* Converts object models representing AWS API beans into Java classes.
|
||||
* <p>
|
||||
* This implementation is designed to perform the following steps:
|
||||
* <ul>
|
||||
* <li>Parse the JSON object representation produced by the <tt>parse_ec2.pl</tt> perl script</li>
|
||||
* <li>Convert the JSON into Java object models (@see org.jclouds.aws.codegen.models)</li>
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class ConvertContentToField implements Function<Content, Field> {
|
||||
|
||||
public Field apply(Content from) {
|
||||
Field field = new Field();
|
||||
field.setConstraints(from.getConstraints());
|
||||
field.setDefaultValue(from.getDefaultValue());
|
||||
field.setDesc(from.getDesc());
|
||||
field.setName(from.getName());
|
||||
field.setJavaName(parseJavaName(from.getName()));
|
||||
field.setOptional(Boolean.parseBoolean(from.getOptional()));
|
||||
field.setType(from.getType());
|
||||
field.setValueMap(from.getValueMap());
|
||||
field.setJavaType(parseJavaType(from.getType()));
|
||||
return field;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
String parseJavaType(String type) {
|
||||
if (type.indexOf("xsd:") >= 0) {
|
||||
return parseJavaTypeForXsd(type);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
String parseJavaTypeForXsd(String type) {
|
||||
if (type.equals("xsd:string")) {
|
||||
return "String";
|
||||
} else if (type.equals("xsd:Int")) {
|
||||
return "Integer";
|
||||
} else if (type.equals("xsd:boolean")) {
|
||||
return "Boolean";
|
||||
} else if (type.equals("xsd:dateTime")) {
|
||||
return "org.joda.time.DateTime";
|
||||
} else {
|
||||
throw new IllegalArgumentException("type not supported: " + type);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
String parseJavaName(String name) {
|
||||
return name;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,904 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.ec2.queryapi.parser;
|
||||
|
||||
import org.jclouds.codegen.ec2.queryapi.Category;
|
||||
import org.jclouds.codegen.ec2.queryapi.Content;
|
||||
import org.jclouds.codegen.ec2.queryapi.DataType;
|
||||
import org.jclouds.codegen.ec2.queryapi.Query;
|
||||
import org.jclouds.codegen.ec2.queryapi.parser.AmazonEC2QueryAPIParser;
|
||||
import org.jclouds.codegen.ec2.queryapi.parser.AmazonEC2QueryAPIValidator;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
/**
|
||||
* Tests to ensure that the json file parsed from the EC2 site appears correct.
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(testName = "ec2.AmazonEC2QueryAPIParser")
|
||||
public class AmazonEC2QueryAPIParserTest extends AmazonEC2QueryAPIValidator {
|
||||
@BeforeTest
|
||||
public void setUp() throws Exception {
|
||||
setModel(new AmazonEC2QueryAPIParser().parseJSONResource("/objmodels/ec2.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCategoriesParsedNames() {
|
||||
super.validateCategories();
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
public void tearDown() throws Exception {
|
||||
setModel(null);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void codeUsedToGenerateThisClass() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder
|
||||
.append(" private Map<String, Set<String>> expectedQueryNamesForCategoryName = new ImmutableMap.Builder");
|
||||
builder.append("<String, Set<String>>()").append("\n");
|
||||
|
||||
for (Category category : getModel().getCategories().values()) {
|
||||
builder.append(String.format(".put(\"%1$s\",%n ImmutableSet.of(", category.getName()));
|
||||
for (String string : category.getQueries().keySet()) {
|
||||
builder.append(String.format("\"%1$s\",", string));
|
||||
}
|
||||
builder.append(String.format("))%n"));
|
||||
}
|
||||
builder.append(String.format(".build();"));
|
||||
System.out.println(builder.toString().replaceAll(",\\)", ")"));
|
||||
|
||||
builder = new StringBuilder();
|
||||
builder
|
||||
.append(" private Map<String, Set<String>> expectedFieldNamesForBeanName = new ImmutableMap.Builder");
|
||||
builder.append("<String, Set<String>>()").append("\n");
|
||||
|
||||
for (DataType bean : getModel().getDataTypes().values()) {
|
||||
builder.append(String.format(".put(\"%1$s\",%n ImmutableSet.of(", bean.getType()));
|
||||
for (Content field : bean.getContents()) {
|
||||
builder.append(String.format("\"%1$s\",", field.getName()));
|
||||
}
|
||||
builder.append(String.format("))%n"));
|
||||
}
|
||||
for (Category category : getModel().getCategories().values()) {
|
||||
for (DataType bean : category.getQueries().values()) {
|
||||
builder.append(String.format(".put(\"%1$s\",%n ImmutableSet.of(", bean.getType()));
|
||||
for (Content field : bean.getContents()) {
|
||||
builder.append(String.format("\"%1$s\",", field.getName()));
|
||||
}
|
||||
builder.append(String.format("))%n"));
|
||||
}
|
||||
}
|
||||
builder.append(String.format(".build();"));
|
||||
System.out.println(builder.toString().replaceAll(",\\)", ")"));
|
||||
|
||||
for (String string : getModel().getCategories().keySet()) {
|
||||
System.out.printf(" @Test%n public void test%1$sQueryNames(){%n "
|
||||
+ "validateQueriesInCategory(\"%2$s\");" + "}%n", string.replaceAll(" ", ""),
|
||||
string);
|
||||
}
|
||||
|
||||
for (Category cat : getModel().getCategories().values()) {
|
||||
for (Query bean : cat.getQueries().values()) {
|
||||
System.out.printf(" @Test%n public void test%1$sQuery(){%n "
|
||||
+ "validateQueryInCategory(\"%1$s\", \"%2$s\");%n}%n", bean.getType(), cat
|
||||
.getName());
|
||||
}
|
||||
|
||||
}
|
||||
for (DataType bean : getModel().getDataTypes().values()) {
|
||||
System.out.printf(" @Test%n public void test%1$sBean(){%n "
|
||||
+ "validateFieldsOfBean(getModel().getDomain().get(\"%1$s\"));%n}%n", bean
|
||||
.getType());
|
||||
}
|
||||
System.out.printf(" public EC2ModelValidator validateCommands() {%n");
|
||||
for (Category cat : getModel().getCategories().values()) {
|
||||
for (Query bean : cat.getQueries().values()) {
|
||||
System.out.printf("validateQueryInCategory(\"%1$s\", \"%2$s\");%n", bean.getType(), cat
|
||||
.getName());
|
||||
}
|
||||
}
|
||||
System.out.printf("return this;%n }%n");
|
||||
|
||||
System.out.printf(" public EC2ModelValidator validateDomain() {%n");
|
||||
for (DataType bean : getModel().getDataTypes().values()) {
|
||||
System.out.printf("validateFieldsOfBean(getModel().getDomain().get(\"%1$s\"));%n", bean
|
||||
.getType());
|
||||
}
|
||||
|
||||
System.out.printf("return this;%n }%n");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAmazonDevPayQueryNames() {
|
||||
validateQueriesInCategory("Amazon DevPay");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAMIsQueryNames() {
|
||||
validateQueriesInCategory("AMIs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAvailabilityZonesandRegionsQueryNames() {
|
||||
validateQueriesInCategory("Availability Zones and Regions");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testElasticBlockStoreQueryNames() {
|
||||
validateQueriesInCategory("Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testElasticIPAddressesQueryNames() {
|
||||
validateQueriesInCategory("Elastic IP Addresses");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGeneralQueryNames() {
|
||||
validateQueriesInCategory("General");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testImagesQueryNames() {
|
||||
validateQueriesInCategory("Images");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInstancesQueryNames() {
|
||||
validateQueriesInCategory("Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testKeyPairsQueryNames() {
|
||||
validateQueriesInCategory("Key Pairs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMonitoringQueryNames() {
|
||||
validateQueriesInCategory("Monitoring");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReservedInstancesQueryNames() {
|
||||
validateQueriesInCategory("Reserved Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSecurityGroupsQueryNames() {
|
||||
validateQueriesInCategory("Security Groups");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWindowsQueryNames() {
|
||||
validateQueriesInCategory("Windows");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConfirmProductInstanceQuery() {
|
||||
validateQueryInCategory("ConfirmProductInstance", "Amazon DevPay");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeregisterImageQuery() {
|
||||
validateQueryInCategory("DeregisterImage", "AMIs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testModifyImageAttributeQuery() {
|
||||
validateQueryInCategory("ModifyImageAttribute", "AMIs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeImageAttributeQuery() {
|
||||
validateQueryInCategory("DescribeImageAttribute", "AMIs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeImagesQuery() {
|
||||
validateQueryInCategory("DescribeImages", "AMIs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeAvailabilityZonesQuery() {
|
||||
validateQueryInCategory("DescribeAvailabilityZones", "Availability Zones and Regions");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeRegionsQuery() {
|
||||
validateQueryInCategory("DescribeRegions", "Availability Zones and Regions");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteVolumeQuery() {
|
||||
validateQueryInCategory("DeleteVolume", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeSnapshotsQuery() {
|
||||
validateQueryInCategory("DescribeSnapshots", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeVolumesQuery() {
|
||||
validateQueryInCategory("DescribeVolumes", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetachVolumeQuery() {
|
||||
validateQueryInCategory("DetachVolume", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAttachVolumeQuery() {
|
||||
validateQueryInCategory("AttachVolume", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateSnapshotQuery() {
|
||||
validateQueryInCategory("CreateSnapshot", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateVolumeQuery() {
|
||||
validateQueryInCategory("CreateVolume", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSnapshotQuery() {
|
||||
validateQueryInCategory("DeleteSnapshot", "Elastic Block Store");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllocateAddressQuery() {
|
||||
validateQueryInCategory("AllocateAddress", "Elastic IP Addresses");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDisassociateAddressQuery() {
|
||||
validateQueryInCategory("DisassociateAddress", "Elastic IP Addresses");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReleaseAddressQuery() {
|
||||
validateQueryInCategory("ReleaseAddress", "Elastic IP Addresses");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAssociateAddressQuery() {
|
||||
validateQueryInCategory("AssociateAddress", "Elastic IP Addresses");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeAddressesQuery() {
|
||||
validateQueryInCategory("DescribeAddresses", "Elastic IP Addresses");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetConsoleOutputQuery() {
|
||||
validateQueryInCategory("GetConsoleOutput", "General");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testResetImageAttributeQuery() {
|
||||
validateQueryInCategory("ResetImageAttribute", "Images");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisterImageQuery() {
|
||||
validateQueryInCategory("RegisterImage", "Images");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTerminateInstancesQuery() {
|
||||
validateQueryInCategory("TerminateInstances", "Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeInstancesQuery() {
|
||||
validateQueryInCategory("DescribeInstances", "Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRunInstancesQuery() {
|
||||
validateQueryInCategory("RunInstances", "Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRebootInstancesQuery() {
|
||||
validateQueryInCategory("RebootInstances", "Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeKeyPairsQuery() {
|
||||
validateQueryInCategory("DescribeKeyPairs", "Key Pairs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateKeyPairQuery() {
|
||||
validateQueryInCategory("CreateKeyPair", "Key Pairs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteKeyPairQuery() {
|
||||
validateQueryInCategory("DeleteKeyPair", "Key Pairs");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMonitorInstancesQuery() {
|
||||
validateQueryInCategory("MonitorInstances", "Monitoring");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnmonitorInstancesQuery() {
|
||||
validateQueryInCategory("UnmonitorInstances", "Monitoring");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesQuery() {
|
||||
validateQueryInCategory("DescribeReservedInstances", "Reserved Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesOfferingsQuery() {
|
||||
validateQueryInCategory("DescribeReservedInstancesOfferings", "Reserved Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPurchaseReservedInstancesOfferingQuery() {
|
||||
validateQueryInCategory("PurchaseReservedInstancesOffering", "Reserved Instances");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeSecurityGroupsQuery() {
|
||||
validateQueryInCategory("DescribeSecurityGroups", "Security Groups");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAuthorizeSecurityGroupIngressQuery() {
|
||||
validateQueryInCategory("AuthorizeSecurityGroupIngress", "Security Groups");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateSecurityGroupQuery() {
|
||||
validateQueryInCategory("CreateSecurityGroup", "Security Groups");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSecurityGroupQuery() {
|
||||
validateQueryInCategory("DeleteSecurityGroup", "Security Groups");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRevokeSecurityGroupIngressQuery() {
|
||||
validateQueryInCategory("RevokeSecurityGroupIngress", "Security Groups");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCancelBundleTaskQuery() {
|
||||
validateQueryInCategory("CancelBundleTask", "Windows");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeBundleTasksQuery() {
|
||||
validateQueryInCategory("DescribeBundleTasks", "Windows");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBundleInstanceQuery() {
|
||||
validateQueryInCategory("BundleInstance", "Windows");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReservationSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ReservationSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteKeyPairResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DeleteKeyPairResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeKeyPairsResponseInfoTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeKeyPairsResponseInfoType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAuthorizeSecurityGroupIngressResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AuthorizeSecurityGroupIngressResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAttachmentSetItemResponseTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AttachmentSetItemResponseType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeAddressesResponseInfoTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeAddressesResponseInfoType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeReservedInstancesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeVolumesSetItemResponseTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeVolumesSetItemResponseType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLaunchPermissionItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("LaunchPermissionItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeSnapshotsSetItemResponseTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeSnapshotsSetItemResponseType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRunningInstancesItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RunningInstancesItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesOfferingsResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeReservedInstancesOfferingsResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBlockDeviceMappingTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BlockDeviceMappingType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testResetImageAttributeResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ResetImageAttributeResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAvailabilityZoneSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AvailabilityZoneSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRevokeSecurityGroupIngressResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RevokeSecurityGroupIngressResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReservationInfoTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ReservationInfoType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRebootInstancesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RebootInstancesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGroupItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("GroupItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAvailabilityZoneItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AvailabilityZoneItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRunningInstancesSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RunningInstancesSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateSecurityGroupResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("CreateSecurityGroupResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReleaseAddressResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ReleaseAddressResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSecurityGroupItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("SecurityGroupItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullableAttributeValueTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("NullableAttributeValueType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeSnapshotsResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeSnapshotsResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBundleInstanceResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BundleInstanceResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeKeyPairsResponseItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeKeyPairsResponseItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBundleInstanceTasksSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BundleInstanceTasksSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeAddressesResponseItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeAddressesResponseItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMonitorInstancesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("MonitorInstancesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeImagesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeImagesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMonitorInstancesResponseSetItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("MonitorInstancesResponseSetItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBundleInstanceTaskErrorTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BundleInstanceTaskErrorType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProductCodesSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ProductCodesSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnmonitorInstancesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("UnmonitorInstancesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIpPermissionTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("IpPermissionType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIpPermissionSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("IpPermissionSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSecurityGroupResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DeleteSecurityGroupResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRunInstancesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RunInstancesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeregisterImageResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DeregisterImageResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTerminateInstancesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("TerminateInstancesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeSnapshotsSetResponseTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeSnapshotsSetResponseType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesOfferingsResponseSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get(
|
||||
"DescribeReservedInstancesOfferingsResponseSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBundleInstanceTaskTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BundleInstanceTaskType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConfirmProductInstanceResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ConfirmProductInstanceResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateKeyPairResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("CreateKeyPairResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegisterImageResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RegisterImageResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIpRangeSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("IpRangeSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegionSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RegionSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInstanceStateTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("InstanceStateType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesOfferingsResponseSetItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get(
|
||||
"DescribeReservedInstancesOfferingsResponseSetItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBundleInstanceS3StorageTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BundleInstanceS3StorageType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeVolumesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeVolumesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTerminateInstancesResponseInfoTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("TerminateInstancesResponseInfoType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteSnapshotResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DeleteSnapshotResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBundleInstanceTaskStorageTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BundleInstanceTaskStorageType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeAvailabilityZonesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeAvailabilityZonesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateVolumeResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("CreateVolumeResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesResponseSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeReservedInstancesResponseSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeAddressesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeAddressesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInstanceMonitoringStateTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("InstanceMonitoringStateType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetachVolumeResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DetachVolumeResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeKeyPairsResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeKeyPairsResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAttachVolumeResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AttachVolumeResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeBundleTasksResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeBundleTasksResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTerminateInstancesResponseItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("TerminateInstancesResponseItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSecurityGroupSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("SecurityGroupSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAttachmentSetResponseTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AttachmentSetResponseType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeImageAttributeResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeImageAttributeResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPurchaseReservedInstancesOfferingResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("PurchaseReservedInstancesOfferingResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateSnapshotResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("CreateSnapshotResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGroupSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("GroupSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProductCodesSetItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ProductCodesSetItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllocateAddressResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AllocateAddressResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProductCodeItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ProductCodeItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserIdGroupPairTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("UserIdGroupPairType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeVolumesSetResponseTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeVolumesSetResponseType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProductCodeListTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ProductCodeListType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeRegionsResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeRegionsResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegionItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("RegionItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeInstancesResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeInstancesResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeImagesResponseItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeImagesResponseItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLaunchPermissionListTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("LaunchPermissionListType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBlockDeviceMappingItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("BlockDeviceMappingItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteVolumeResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DeleteVolumeResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeImagesResponseInfoTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeImagesResponseInfoType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIpRangeItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("IpRangeItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDisassociateAddressResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DisassociateAddressResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUserIdGroupPairSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("UserIdGroupPairSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCancelBundleTaskResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("CancelBundleTaskResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMonitorInstancesResponseSetTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get("MonitorInstancesResponseSetType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeReservedInstancesResponseSetItemTypeBean() {
|
||||
validateDataType(getModel().getDataTypes().get(
|
||||
"DescribeReservedInstancesResponseSetItemType"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDescribeSecurityGroupsResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("DescribeSecurityGroupsResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetConsoleOutputResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("GetConsoleOutputResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testModifyImageAttributeResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("ModifyImageAttributeResponse"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAssociateAddressResponseBean() {
|
||||
validateDataType(getModel().getDataTypes().get("AssociateAddressResponse"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
package org.jclouds.codegen.ec2.queryapi.transform;
|
||||
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
/**
|
||||
* Tests to ensure that we can transform EC2 {@link Content contents} to jclouds {@link Field
|
||||
* fields}
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(testName = "ec2.ConvertContentToFieldTest")
|
||||
public class ConvertContentToFieldTest {
|
||||
|
||||
// sub parse_java_type {
|
||||
// $_ = shift;
|
||||
// s/xsd:string/String/;
|
||||
// s/xsd:boolean/Boolean/;
|
||||
// s/xsd:Int/Integer/;
|
||||
// s/xsd:dateTime/DateTime/;
|
||||
// if (/Type/ || /Item/ || /Info/) {
|
||||
// my $awsType = $_;
|
||||
// my $javaType = get_java_name($awsType);
|
||||
// #if ( !/Response/ ) {
|
||||
// $domain->{$awsType} = {
|
||||
// awsType => $awsType,
|
||||
// javaType => $javaType,
|
||||
// packageName => $domain_package,
|
||||
// className => $domain_package . "." . $javaType,
|
||||
// see => ["${refUrl}/ApiReference-ItemType-${awsType}.html"],
|
||||
// fields =>
|
||||
// build_fields("${refUrl}/ApiReference-ItemType-$awsType.html")
|
||||
// };
|
||||
// #}
|
||||
// $_ = $javaType;
|
||||
// }
|
||||
//
|
||||
// return $_;
|
||||
// }
|
||||
//
|
||||
// sub get_java_name {
|
||||
// $_ = shift;
|
||||
// if (/sSetType/) {
|
||||
// s/sSetType//;
|
||||
// return "Set<$_>";
|
||||
// }
|
||||
// if (/ListType/) {
|
||||
// s/ListType//;
|
||||
// return "List<$_>";
|
||||
// }
|
||||
// if (/sResponseInfoType/){
|
||||
// s/sResponseInfoType//;
|
||||
// return "Set<$_>";
|
||||
// }
|
||||
// if (/sSetItemType/) {
|
||||
// s/sSetItemType//;
|
||||
// }
|
||||
// if (/sResponseItemType/){
|
||||
// s/sResponseItemType//;
|
||||
// }
|
||||
// if (/sItemType/) {
|
||||
// s/sItemType//;
|
||||
// }
|
||||
// if (/sSet/) {
|
||||
// s/sSet//;
|
||||
// }
|
||||
// if (/Set/) {
|
||||
// s/Set//;
|
||||
// }
|
||||
// if (/Type/) {
|
||||
// s/Type//;
|
||||
// }
|
||||
// if (/Item/) {
|
||||
// s/Item//;
|
||||
// }
|
||||
// if (/Info/) {
|
||||
// s/Info//;
|
||||
// }
|
||||
// return $_;
|
||||
// }
|
||||
|
||||
@Test
|
||||
void testParseJavaTypeForxsd_string() {
|
||||
ConvertContentToField converter = new ConvertContentToField();
|
||||
assertEquals(converter.parseJavaType("xsd:string"), "String");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testParseJavaTypeForxsd_Int() {
|
||||
ConvertContentToField converter = new ConvertContentToField();
|
||||
assertEquals(converter.parseJavaType("xsd:Int"), "Integer");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testParseJavaTypeForxsd_boolean() {
|
||||
ConvertContentToField converter = new ConvertContentToField();
|
||||
assertEquals(converter.parseJavaType("xsd:boolean"), "Boolean");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testParseJavaTypeForxsd_dateTime() {
|
||||
ConvertContentToField converter = new ConvertContentToField();
|
||||
assertEquals(converter.parseJavaType("xsd:dateTime"), "org.joda.time.DateTime");
|
||||
}
|
||||
|
||||
}
|
192
codegen/pom.xml
192
codegen/pom.xml
|
@ -1,108 +1,106 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
$HeadURL$
|
||||
$Revision$
|
||||
$Date$
|
||||
<!--
|
||||
$HeadURL$ $Revision$ $Date$ Copyright (C) 2009 Adrian Cole
|
||||
<adrian@jclouds.org>
|
||||
|
||||
Copyright (C) 2009 Adrian Cole <adrian@jclouds.org>
|
||||
====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to you under the Apache License, Version
|
||||
2.0 (the "License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
====================================================================
|
||||
-->
|
||||
http://www.apache.org/licenses/LICENSE-2.0.html Unless required by
|
||||
applicable law or agreed to in writing, software distributed under the
|
||||
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
CONDITIONS OF ANY KIND, either express or implied. See the License for
|
||||
the specific language governing permissions and limitations under the
|
||||
License.
|
||||
====================================================================
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<artifactId>jclouds-project</artifactId>
|
||||
<groupId>org.jclouds</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<relativePath>../project/pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jclouds-codegen</artifactId>
|
||||
<name>jclouds code generator</name>
|
||||
<packaging>jar</packaging>
|
||||
<description>jclouds code generator</description>
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<artifactId>jclouds-codegen-project</artifactId>
|
||||
<groupId>org.jclouds</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<relativePath>../project/pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jclouds-codegen-core</artifactId>
|
||||
<name>jclouds code generator</name>
|
||||
<packaging>jar</packaging>
|
||||
<description>jclouds code generator</description>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:http://jclouds.googlecode.com/svn/trunk/codegen</connection>
|
||||
<developerConnection>scm:svn:https://jclouds.googlecode.com/svn/trunk/codegen</developerConnection>
|
||||
<url>http://jclouds.googlecode.com/svn/trunk/codegen</url>
|
||||
</scm>
|
||||
<scm>
|
||||
<connection>scm:svn:http://jclouds.googlecode.com/svn/trunk/codegen/core</connection>
|
||||
<developerConnection>scm:svn:https://jclouds.googlecode.com/svn/trunk/codegen/core</developerConnection>
|
||||
<url>http://jclouds.googlecode.com/svn/trunk/codegen/core</url>
|
||||
</scm>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>gson</id>
|
||||
<url>http://google-gson.googlecode.com/svn/mavenrepo</url>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
</repository>
|
||||
</repositories>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>gson</id>
|
||||
<url>http://google-gson.googlecode.com/svn/mavenrepo</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>compile</scope>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>1.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.freemarker</groupId>
|
||||
<artifactId>freemarker</artifactId>
|
||||
<version>2.3.14</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>org.jclouds.codegen.util.CodeGenerator</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>1.3</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.freemarker</groupId>
|
||||
<artifactId>freemarker</artifactId>
|
||||
<version>2.3.14</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.collections</groupId>
|
||||
<artifactId>google-collections</artifactId>
|
||||
<version>1.0-rc1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>org.jclouds.codegen.util.CodeGenerator</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
|
|
@ -27,23 +27,31 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
* @author James Murty
|
||||
*/
|
||||
public class Model {
|
||||
public class API {
|
||||
private List<Package> packages;
|
||||
private Map<String, Value> domain;
|
||||
private Map<String, DomainType> domain;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return packages.toString();
|
||||
return getPackages().toString();
|
||||
}
|
||||
|
||||
public void setPackages(List<Package> packages) {
|
||||
this.packages = packages;
|
||||
}
|
||||
|
||||
public List<Package> getPackages() {
|
||||
return packages;
|
||||
}
|
||||
|
||||
public Map<String, Value> getDomain() {
|
||||
public void setDomain(Map<String, DomainType> domain) {
|
||||
this.domain = domain;
|
||||
}
|
||||
|
||||
public Map<String, DomainType> getDomain() {
|
||||
return domain;
|
||||
}
|
||||
}
|
|
@ -23,37 +23,45 @@
|
|||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
* @author James Murty
|
||||
*/
|
||||
public class Command extends BaseBean {
|
||||
private List<Parameter> parameters;
|
||||
private Options options;
|
||||
private Handler handler;
|
||||
private Response response;
|
||||
private List<String> see;
|
||||
|
||||
public List<Parameter> getParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
public Options getOptions() {
|
||||
return options;
|
||||
}
|
||||
public class Command extends TopLevelType {
|
||||
private TopLevelType options;
|
||||
private TopLevelType handler;
|
||||
private DomainType response;
|
||||
private String description;
|
||||
|
||||
public Handler getHandler() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
public Response getResponse() {
|
||||
return response;
|
||||
}
|
||||
|
||||
public List<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setOptions(TopLevelType options) {
|
||||
this.options = options;
|
||||
}
|
||||
|
||||
public TopLevelType getOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
public void setHandler(TopLevelType handler) {
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
public TopLevelType getHandler() {
|
||||
return handler;
|
||||
}
|
||||
|
||||
public void setResponse(DomainType response) {
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
public DomainType getResponse() {
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,22 +23,17 @@
|
|||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author James Murty
|
||||
*/
|
||||
public class Handler extends BaseBean {
|
||||
private String example;
|
||||
private List<String> see;
|
||||
|
||||
public String getExample() {
|
||||
return example;
|
||||
}
|
||||
|
||||
public List<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
public class DomainType extends Type {
|
||||
|
||||
}
|
||||
private String ancestor;
|
||||
|
||||
public void setAncestor(String ancestor) {
|
||||
this.ancestor = ancestor;
|
||||
}
|
||||
|
||||
public String getAncestor() {
|
||||
return ancestor;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class Field {
|
||||
|
||||
private String constraints;
|
||||
private String defaultValue;
|
||||
private String desc;
|
||||
private String name;
|
||||
private String javaName;
|
||||
private boolean optional = true;
|
||||
private String type;
|
||||
private String javaType;
|
||||
private Map<String, String> valueMap;
|
||||
|
||||
public void setConstraints(String constraints) {
|
||||
this.constraints = constraints;
|
||||
}
|
||||
|
||||
public String getConstraints() {
|
||||
return constraints;
|
||||
}
|
||||
|
||||
public void setDefaultValue(String defaultValue) {
|
||||
this.defaultValue = defaultValue;
|
||||
}
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public void setDesc(String desc) {
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setValueMap(Map<String, String> valueMap) {
|
||||
this.valueMap = valueMap;
|
||||
}
|
||||
|
||||
public Map<String, String> getValueMap() {
|
||||
return valueMap;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setOptional(boolean optional) {
|
||||
this.optional = optional;
|
||||
}
|
||||
|
||||
public boolean getOptional() {
|
||||
return optional;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setJavaName(String javaName) {
|
||||
this.javaName = javaName;
|
||||
}
|
||||
|
||||
public String getJavaName() {
|
||||
return javaName;
|
||||
}
|
||||
|
||||
public void setJavaType(String javaType) {
|
||||
this.javaType = javaType;
|
||||
}
|
||||
|
||||
public String getJavaType() {
|
||||
return javaType;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author James Murty
|
||||
*/
|
||||
public class Options extends BaseBean {
|
||||
private List<Parameter> parameters;
|
||||
private String example;
|
||||
private List<String> see;
|
||||
|
||||
public List<Parameter> getParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
public String getExample() {
|
||||
return example;
|
||||
}
|
||||
public List<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
|
||||
}
|
|
@ -23,39 +23,35 @@
|
|||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author James Murty
|
||||
*/
|
||||
public class ResponseField {
|
||||
private String javaName;
|
||||
private String desc;
|
||||
private String name;
|
||||
private String type;
|
||||
private String javaType;
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
public class TopLevelType extends Type {
|
||||
|
||||
private String ancestor;
|
||||
private String exampleCode;
|
||||
private String exampleHTML;
|
||||
|
||||
public void setAncestor(String ancestor) {
|
||||
this.ancestor = ancestor;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
public String getAncestor() {
|
||||
return ancestor;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
public void setExampleCode(String exampleCode) {
|
||||
this.exampleCode = exampleCode;
|
||||
}
|
||||
|
||||
public String getJavaType() {
|
||||
return javaType;
|
||||
public String getExampleCode() {
|
||||
return exampleCode;
|
||||
}
|
||||
|
||||
public void setJavaName(String javaName) {
|
||||
this.javaName = javaName;
|
||||
public void setExampleHTML(String exampleHTML) {
|
||||
this.exampleHTML = exampleHTML;
|
||||
}
|
||||
|
||||
public String getJavaName() {
|
||||
return javaName;
|
||||
public String getExampleHTML() {
|
||||
return exampleHTML;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* JBoss, Home of Professional Open Source.
|
||||
* Copyright 2009, Red Hat Middleware LLC, and individual contributors
|
||||
* as indicated by the @author tags. See the copyright.txt file in the
|
||||
* distribution for a full listing of individual contributors.
|
||||
*
|
||||
* This is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as
|
||||
* published by the Free Software Foundation; either version 2.1 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this software; if not, write to the Free
|
||||
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class Type {
|
||||
|
||||
private String packageName;
|
||||
private String name;
|
||||
private String javaName;
|
||||
private Set<String> see;
|
||||
private Set<Field> fields;
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setJavaName(String javaName) {
|
||||
this.javaName = javaName;
|
||||
}
|
||||
|
||||
public String getJavaName() {
|
||||
return javaName;
|
||||
}
|
||||
|
||||
public void setSee(Set<String> see) {
|
||||
this.see = see;
|
||||
}
|
||||
|
||||
public Set<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
|
||||
public void setFields(Set<Field> fields) {
|
||||
this.fields = fields;
|
||||
}
|
||||
|
||||
public Set<Field> getFields() {
|
||||
return fields;
|
||||
}
|
||||
|
||||
public void setPackageName(String packageName) {
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
public String getPackageName() {
|
||||
return packageName;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author James Murty
|
||||
*/
|
||||
public class Value extends BaseBean {
|
||||
private List<ResponseField> fields;
|
||||
private String javaType;
|
||||
private List<String> see;
|
||||
|
||||
public List<ResponseField> getFields() {
|
||||
return fields;
|
||||
}
|
||||
|
||||
public String getJavaType() {
|
||||
return javaType;
|
||||
}
|
||||
|
||||
public List<String> getSee() {
|
||||
return see;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
package org.jclouds.codegen.model;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author James Murty
|
||||
*/
|
||||
public class ValueField {
|
||||
private String desc;
|
||||
private String name;
|
||||
private String type;
|
||||
private String javaType;
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getJavaType() {
|
||||
return javaType;
|
||||
}
|
||||
|
||||
}
|
|
@ -32,11 +32,11 @@ import java.io.Writer;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.jclouds.codegen.model.BaseBean;
|
||||
import org.jclouds.codegen.model.API;
|
||||
import org.jclouds.codegen.model.Command;
|
||||
import org.jclouds.codegen.model.Model;
|
||||
import org.jclouds.codegen.model.DomainType;
|
||||
import org.jclouds.codegen.model.Package;
|
||||
import org.jclouds.codegen.model.Value;
|
||||
import org.jclouds.codegen.model.Type;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonParseException;
|
||||
|
@ -89,10 +89,10 @@ public class CodeGenerator {
|
|||
* @throws JsonParseException
|
||||
* @throws FileNotFoundException
|
||||
*/
|
||||
public Model parseModelFromJSON(File objectModelFile) throws JsonParseException,
|
||||
public API parseModelFromJSON(File objectModelFile) throws JsonParseException,
|
||||
FileNotFoundException {
|
||||
Gson gson = new Gson();
|
||||
return gson.fromJson(new FileReader(objectModelFile), Model.class);
|
||||
return gson.fromJson(new FileReader(objectModelFile), API.class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -106,7 +106,7 @@ public class CodeGenerator {
|
|||
*/
|
||||
public void generateCode(File objectModelFile) throws JsonParseException, IOException,
|
||||
TemplateException {
|
||||
Model model = parseModelFromJSON(objectModelFile);
|
||||
API model = parseModelFromJSON(objectModelFile);
|
||||
|
||||
for (Package pkg : model.getPackages()) {
|
||||
for (Command command : pkg.getCommands()) {
|
||||
|
@ -116,17 +116,17 @@ public class CodeGenerator {
|
|||
generateClassFile(command.getHandler(), BEAN_TEMPLATE_FILENAME);
|
||||
}
|
||||
if (command.getOptions() != null
|
||||
&& command.getOptions().getClassName().indexOf(
|
||||
&& command.getOptions().getJavaName().indexOf(
|
||||
"BaseEC2RequestOptions<EC2RequestOptions>") == -1) {
|
||||
generateClassFile(command.getOptions(), OPTIONS_TEMPLATE_FILENAME);
|
||||
}
|
||||
if (command.getResponse() != null
|
||||
&& !command.getResponse().getJavaType().equals("Boolean")) {
|
||||
&& !command.getResponse().getJavaName().equals("Boolean")) {
|
||||
generateClassFile(command.getResponse(), RESPONSE_TEMPLATE_FILENAME);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Value value : model.getDomain().values()) {
|
||||
for (DomainType value : model.getDomain().values()) {
|
||||
generateClassFile(value, VALUE_TEMPLATE_FILENAME);
|
||||
}
|
||||
|
||||
|
@ -141,10 +141,10 @@ public class CodeGenerator {
|
|||
* @throws IOException
|
||||
* @throws TemplateException
|
||||
*/
|
||||
public void generateClassFile(BaseBean bean, String templateFileName) throws IOException,
|
||||
public void generateClassFile(Type bean, String templateFileName) throws IOException,
|
||||
TemplateException {
|
||||
String shortClassName = bean.getClassName().substring(
|
||||
bean.getClassName().lastIndexOf('.') + 1);
|
||||
String shortClassName = bean.getJavaName().substring(
|
||||
bean.getJavaName().lastIndexOf('.') + 1);
|
||||
|
||||
Map<String, Object> objectMap = new HashMap<String, Object>();
|
||||
objectMap.put("bean", bean);
|
||||
|
|
Loading…
Reference in New Issue