Revision 1031 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DynClassImportHelper.java

View differences:

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