private void createCoordinateClass(final Outline outline) {
// JPackage kmlpackage = Util.getKmlClassPackage(outline);
// CodeModelClassFactory classFactory = outline.getClassFactory();
// coordinateClass = classFactory.createClass(kmlpackage, JMod.PUBLIC, "Coordinate", null, ClassType.CLASS);
final JDefinedClass coordinateClass = pool.getClassCoordinate();
longitude = coordinateClass.fields().get("longitude");
latitude = coordinateClass.fields().get("latitude");
altitude = coordinateClass.fields().get("altitude");
// longitude.init(JExpr.lit(0.0d));
// latitude.init(JExpr.lit(0.0d));
// altitude.init(JExpr.lit(0.0d));
// longitude = coordinateClass.field(JMod.PRIVATE, cm.DOUBLE, "longitu33de", JExpr.lit(0.0d));
// latitude = coordinateClass.field(JMod.PRIVATE, cm.DOUBLE, "latitud33e", JExpr.lit(0.0d));
// altitude = coordinateClass.field(JMod.PRIVATE, cm.DOUBLE, "altitud33e", JExpr.lit(0.0d));
final JMethod noArgConstructor = coordinateClass.constructor(JMod.PRIVATE);
noArgConstructor.annotate(Deprecated.class);
noArgConstructor.javadoc().add("Default no-arg constructor is private. Use overloaded constructor instead! ");
noArgConstructor.javadoc().add("(Temporary solution, till a better and more suitable ObjectFactory is created.) ");
final JMethod twoDoubleArgConstructor = coordinateClass.constructor(JMod.PUBLIC);
addConstructorParam(twoDoubleArgConstructor, longitude);
addConstructorParam(twoDoubleArgConstructor, latitude);
final JMethod threeDoubleArgConstructor = coordinateClass.constructor(JMod.PUBLIC);
addConstructorParam(threeDoubleArgConstructor, longitude);
addConstructorParam(threeDoubleArgConstructor, latitude);
addConstructorParam(threeDoubleArgConstructor, altitude);
final JMethod stringArgConstructor = coordinateClass.constructor(JMod.PUBLIC);
final JVar stringConstructorArg = stringArgConstructor.param(JMod.FINAL, String.class, "coordinates");
// http://code.google.com/p/javaapiforkml/issues/detail?id=10
// changed:
// String[] coords = coordinates.replaceAll(",[ ]+?", ",").trim().split(",");
// to:
// String[] coords = coordinates.replaceAll(",\\s+", ",").trim().split(",");
final JVar varCoords = stringArgConstructor.body().decl(stringClass.array(), "coords",
stringConstructorArg.invoke("replaceAll").arg(",\\s+").arg(",").invoke("trim").invoke("split").arg(","));
// CODE: if ((coords < 1) && (coords > 3)) {throw IllegalArgumentException}
stringArgConstructor.body()._if(
JExpr.ref(varCoords.name()).ref("length").lt(JExpr.lit(1)).cand(JExpr.ref(varCoords.name()).ref("length").gt(JExpr.lit(3))))
._then()._throw(JExpr._new(illegalArgumentExceptionClass));
stringArgConstructor.body().assign(JExpr.refthis(longitude.name()),
JExpr.ref("Double").invoke("parseDouble").arg(JExpr.direct("coords[0]")));
stringArgConstructor.body().assign(JExpr.refthis(latitude.name()),
JExpr.ref("Double").invoke("parseDouble").arg(JExpr.direct("coords[1]")));
stringArgConstructor.body()._if(JExpr.ref(varCoords.name()).ref("length").eq(JExpr.lit(3)))._then().assign(
JExpr.refthis(altitude.name()), JExpr.ref("Double").invoke("parseDouble").arg(JExpr.direct("coords[2]")));
// toString
final JMethod toString = coordinateClass.method(JMod.PUBLIC, stringClass, "toString");
toString.annotate(Override.class);
final JVar sbVar = toString.body().decl(stringBuilderClass, "sb", JExpr._new(stringBuilderClass));
toString.body().add(sbVar.invoke("append").arg(longitude));
toString.body().add(sbVar.invoke("append").arg(","));
toString.body().add(sbVar.invoke("append").arg(latitude));