Revision 1031 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DynClassImportHelper.java
DynClassImportHelper.java | ||
---|---|---|
31 | 31 |
import java.util.List; |
32 | 32 |
import java.util.Map; |
33 | 33 |
|
34 |
import org.slf4j.Logger; |
|
35 |
import org.slf4j.LoggerFactory; |
|
36 |
import org.xmlpull.v1.XmlPullParser; |
|
37 |
import org.xmlpull.v1.XmlPullParserException; |
|
38 |
import org.xmlpull.v1.XmlPullParserFactory; |
|
39 |
|
|
40 | 34 |
import org.gvsig.tools.ToolsLocator; |
41 | 35 |
import org.gvsig.tools.dataTypes.CoercionException; |
42 | 36 |
import org.gvsig.tools.dataTypes.DataTypes; |
43 | 37 |
import org.gvsig.tools.dynobject.DynClass; |
44 | 38 |
import org.gvsig.tools.dynobject.DynClassName; |
45 |
import org.gvsig.tools.dynobject.DynField; |
|
39 |
import org.gvsig.tools.dynobject.DynField_v2;
|
|
46 | 40 |
import org.gvsig.tools.dynobject.DynObjectManager; |
47 | 41 |
import org.gvsig.tools.dynobject.DynObjectRuntimeException; |
48 | 42 |
import org.gvsig.tools.dynobject.DynObjectValueItem; |
49 | 43 |
import org.gvsig.tools.dynobject.exception.DynFieldIsNotAContainerException; |
50 | 44 |
import org.gvsig.tools.exception.BaseRuntimeException; |
51 | 45 |
import org.gvsig.tools.exception.ListBaseException; |
46 |
import org.slf4j.Logger; |
|
47 |
import org.slf4j.LoggerFactory; |
|
48 |
import org.xmlpull.v1.XmlPullParser; |
|
49 |
import org.xmlpull.v1.XmlPullParserException; |
|
50 |
import org.xmlpull.v1.XmlPullParserFactory; |
|
52 | 51 |
|
53 | 52 |
public class DynClassImportHelper { |
54 | 53 |
|
... | ... | |
82 | 81 |
private static final String FIELD_MAXVALUE_TAG = "maxValue"; |
83 | 82 |
private static final String FIELD_CLASSOFVALUE_TAG = "classOfValue"; |
84 | 83 |
private static final String FIELD_CLASSOFITEMS_TAG = "classOfItems"; |
84 |
private static final String FIELD_ELEMENTTYPE_TAG = "elementType"; |
|
85 |
private static final String FIELD_STRUCTUSEDWHENISDYNOBJECT_TAG = "StructWhenTypeIsDynObject"; |
|
85 | 86 |
private static final String FIELD_DEFAULTVALUE_TAG = "defaultValue"; |
86 | 87 |
// private static final String FIELD_TYPEOFAVALILABLEVALUES_TAG = |
87 | 88 |
// "typeOfAvailableValues"; |
... | ... | |
90 | 91 |
private static final String FIELD_ORDER_TAG = "order"; |
91 | 92 |
private static final String FIELD_HIDDEN_TAG = "hidden"; |
92 | 93 |
private static final String FIELD_LABEL_TAG = "label"; |
93 |
|
|
94 |
private static final String FIELD_TAGS_TAG = "tags"; |
|
95 |
private static final String VALUEITEM_TAGNAME_TAG = "name"; |
|
96 |
|
|
94 | 97 |
private static final String VALUEITEM_TAG = "valueItem"; |
95 | 98 |
private static final String VALUEITEM_LABEL_TAG = "label"; |
96 | 99 |
private static final String VALUEITEM_VALUE_TAG = "value"; |
97 | 100 |
|
98 | 101 |
private DynObjectManager manager = ToolsLocator.getDynObjectManager(); |
99 | 102 |
|
103 |
private Map dynClasses = null; |
|
104 |
|
|
100 | 105 |
private String getNullWhenEmptyString(String value) { |
101 | 106 |
if (value != null) { |
102 | 107 |
if (value.trim().length() == 0) { |
... | ... | |
191 | 196 |
|
192 | 197 |
public Map importDefinitions(XmlPullParser parser, ClassLoader loader, |
193 | 198 |
String defaultNamespace) throws XmlPullParserException, IOException { |
194 |
Map dynClasses = new Definitions();
|
|
199 |
dynClasses = new Definitions(); |
|
195 | 200 |
String version = null; |
196 | 201 |
|
197 | 202 |
if (loader == null) { |
... | ... | |
394 | 399 |
|
395 | 400 |
private void importDynField(XmlPullParser parser, DynClass dynClass, |
396 | 401 |
ClassLoader loader) throws XmlPullParserException, IOException { |
397 |
DynField field; |
|
402 |
DynField_v2 field;
|
|
398 | 403 |
List availableValues = null; |
404 |
List tagsValues = null; |
|
399 | 405 |
Map values = new HashMap(); |
400 | 406 |
|
401 | 407 |
parser.require(XmlPullParser.START_TAG, null, FIELD_TAG); |
... | ... | |
468 | 474 |
while (!(parser.getEventType() == XmlPullParser.END_TAG && parser |
469 | 475 |
.getName().equals(FIELD_AVALILABLEVALUES_TAG))) { |
470 | 476 |
checkEndDocument(parser); |
471 |
availableValues.add(importValueItem(parser)); |
|
477 |
availableValues.add(importValueItem(parser, VALUEITEM_LABEL_TAG));
|
|
472 | 478 |
parser.nextTag(); |
473 | 479 |
} |
474 | 480 |
|
481 |
} else if (name.equalsIgnoreCase(FIELD_TAGS_TAG)) { |
|
482 |
parser.nextTag(); |
|
483 |
tagsValues = new ArrayList(); |
|
484 |
while (!(parser.getEventType() == XmlPullParser.END_TAG && parser |
|
485 |
.getName().equals(FIELD_TAGS_TAG))) { |
|
486 |
checkEndDocument(parser); |
|
487 |
tagsValues.add(importValueItem(parser, VALUEITEM_TAGNAME_TAG)); |
|
488 |
parser.nextTag(); |
|
489 |
} |
|
490 |
|
|
475 | 491 |
} else { |
476 | 492 |
break; |
477 | 493 |
} |
... | ... | |
487 | 503 |
// |
488 | 504 |
// Create the field |
489 | 505 |
// |
490 |
field = dynClass.addDynField((String) values.get(FIELD_NAME_TAG)); |
|
506 |
field = (DynField_v2) dynClass.addDynField((String) values.get(FIELD_NAME_TAG));
|
|
491 | 507 |
|
492 | 508 |
// |
493 | 509 |
// Setting type and subtype first |
... | ... | |
592 | 608 |
} else if (name.equalsIgnoreCase(FIELD_DEFAULTVALUE_TAG)) { |
593 | 609 |
field.setDefaultFieldValue(value); |
594 | 610 |
|
611 |
} else if (name.equalsIgnoreCase(FIELD_ELEMENTTYPE_TAG)) { |
|
612 |
DynClass dynStruct = (DynClass) dynClasses.get(value); |
|
613 |
if(dynStruct==null){ |
|
614 |
dynStruct = this.manager.get(value); |
|
615 |
} |
|
616 |
if(dynStruct==null){ |
|
617 |
LOG.warn("No se ha encontrado la dynClass '" + value + "'."); |
|
618 |
throw new IncompatibleAttributeValueException(parser, |
|
619 |
FIELD_ELEMENTTYPE_TAG); |
|
620 |
} |
|
621 |
field.setElementsType(dynStruct); |
|
622 |
|
|
623 |
} else if (name.equalsIgnoreCase(FIELD_STRUCTUSEDWHENISDYNOBJECT_TAG)) { |
|
624 |
DynClass dynStruct = (DynClass) dynClasses.get(value); |
|
625 |
if(dynStruct==null){ |
|
626 |
dynStruct = this.manager.get(value); |
|
627 |
} |
|
628 |
if(dynStruct==null){ |
|
629 |
LOG.warn("No se ha encontrado la dynClass '" + value + "'."); |
|
630 |
throw new IncompatibleAttributeValueException(parser, |
|
631 |
FIELD_STRUCTUSEDWHENISDYNOBJECT_TAG); |
|
632 |
} |
|
633 |
field.setStructWhenTypeIsDynObject(dynStruct); |
|
634 |
|
|
595 | 635 |
} else if (name.equalsIgnoreCase(FIELD_AVALILABLEVALUES_TAG)) { |
596 | 636 |
// Do nothing |
597 | 637 |
|
... | ... | |
628 | 668 |
} |
629 | 669 |
field.setAvailableValues(availableValues); |
630 | 670 |
} |
671 |
if (tagsValues != null && !tagsValues.isEmpty()) { |
|
672 |
for (int i = 0; i < tagsValues.size(); i++) { |
|
673 |
PairValueLabel pair = (PairValueLabel) tagsValues.get(i); |
|
674 |
if (pair.label != null) { |
|
675 |
field.setTag(pair.label, pair.value); |
|
676 |
} |
|
677 |
} |
|
678 |
} |
|
631 | 679 |
field.setMaxValue(field.coerce(values.get(FIELD_MAXVALUE_TAG))); |
632 | 680 |
field.setMinValue(field.coerce(values.get(FIELD_MINVALUE_TAG))); |
633 | 681 |
field.setDefaultFieldValue(field.coerce(values |
... | ... | |
642 | 690 |
String value = null; |
643 | 691 |
} |
644 | 692 |
|
645 |
private PairValueLabel importValueItem(XmlPullParser parser) |
|
693 |
private PairValueLabel importValueItem(XmlPullParser parser, String attributeName)
|
|
646 | 694 |
throws XmlPullParserException, IOException { |
647 | 695 |
PairValueLabel pair = new PairValueLabel(); |
648 | 696 |
|
... | ... | |
650 | 698 |
parser.require(XmlPullParser.START_TAG, null, VALUEITEM_TAG); |
651 | 699 |
for (int i = 0; i < parser.getAttributeCount(); i++) { |
652 | 700 |
String name = parser.getAttributeName(i); |
653 |
if (name.equalsIgnoreCase(VALUEITEM_LABEL_TAG)) {
|
|
701 |
if (name.equalsIgnoreCase(attributeName)) {
|
|
654 | 702 |
pair.label = this.getAttributeValue(parser, i); |
655 | 703 |
} else if (name.equalsIgnoreCase(VALUEITEM_VALUE_TAG)) { |
656 | 704 |
pair.value = this.getAttributeValue(parser, i); |
... | ... | |
665 | 713 |
checkEndDocument(parser); |
666 | 714 |
parser.require(XmlPullParser.START_TAG, null, null); |
667 | 715 |
String name = parser.getName(); |
668 |
if (name.equalsIgnoreCase(VALUEITEM_LABEL_TAG)) {
|
|
716 |
if (name.equalsIgnoreCase(attributeName)) {
|
|
669 | 717 |
pair.label = this.nextText(parser); |
670 | 718 |
} else if (name.equalsIgnoreCase(VALUEITEM_VALUE_TAG)) { |
671 | 719 |
pair.value = this.nextText(parser); |
... | ... | |
680 | 728 |
parser.require(XmlPullParser.START_TAG, null, VALUEITEM_VALUE_TAG); |
681 | 729 |
for (int i = 0; i < parser.getAttributeCount(); i++) { |
682 | 730 |
String name = parser.getAttributeName(i); |
683 |
if (name.equalsIgnoreCase(VALUEITEM_LABEL_TAG)) {
|
|
731 |
if (name.equalsIgnoreCase(attributeName)) {
|
|
684 | 732 |
pair.label = parser.getAttributeValue(i); |
733 |
} else if (name.equalsIgnoreCase(VALUEITEM_VALUE_TAG)) { |
|
734 |
pair.value = this.getAttributeValue(parser, i); |
|
685 | 735 |
} else { |
686 | 736 |
throw new UnexpectedTagOrAttributeException(parser, name); |
687 | 737 |
} |
688 | 738 |
} |
689 |
pair.value = parser.nextText(); |
|
739 |
if(pair.value == null){ |
|
740 |
pair.value = parser.nextText(); |
|
741 |
}else{ |
|
742 |
pair.value += parser.nextText(); |
|
743 |
} |
|
690 | 744 |
parser.require(XmlPullParser.END_TAG, null, VALUEITEM_VALUE_TAG); |
691 | 745 |
} |
692 | 746 |
return pair; |
Also available in: Unified diff