Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.lib / src / main / java / org / gvsig / tools / dynobject / impl / DynClassExportHelper.java @ 1259

History | View | Annotate | Download (7.87 KB)

1
package org.gvsig.tools.dynobject.impl;
2

    
3
import java.io.File;
4
import java.io.FileNotFoundException;
5
import java.io.FileOutputStream;
6
import java.io.OutputStream;
7
import java.io.PrintStream;
8
import java.util.Iterator;
9
import java.util.LinkedHashMap;
10
import java.util.Map;
11
import org.gvsig.tools.dynobject.DynClass;
12
import org.gvsig.tools.dynobject.DynField;
13
import org.gvsig.tools.dynobject.DynObjectValueItem;
14

    
15
public class DynClassExportHelper implements DynClassImportExportTags {
16

    
17
    private class XMLTag {
18

    
19
        private String tagname;
20
        private Map attributes = new LinkedHashMap();
21

    
22
        public XMLTag(String tagname) {
23
            this.tagname = tagname;
24
        }
25

    
26
        public String getTagname() {
27
            return tagname;
28
        }
29
        
30
        public void set(String name, String value) {
31
            if( value == null ) {
32
                return;
33
            }
34
            this.attributes.put(name, value);
35
        }
36
        
37
        public void set(String name, int value) {
38
            this.attributes.put(name, Integer.toString(value));
39
        }
40
        
41
        public void set(String name, Object value) {
42
            if( value == null ) {
43
                return;
44
            }
45
            this.attributes.put(name, value.toString());
46
        }
47
        
48
        public void set(String name, boolean value) {
49
            this.attributes.put(name, value? "true":"false");
50
        }
51
        
52
        public String toString() {
53
            StringBuffer buffer = new StringBuffer();
54
            buffer.append("<");
55
            buffer.append(this.tagname);
56
            if( this.attributes.size()>0 ) {
57
                Iterator entries = this.attributes.entrySet().iterator();
58
                while( entries.hasNext() ) {
59
                    Map.Entry entry = (Map.Entry) entries.next();
60
                    buffer.append(" ");
61
                    buffer.append(entry.getKey());
62
                    buffer.append("=\"");
63
                    buffer.append(entry.getValue());
64
                    buffer.append("\"");
65
                }
66
            }
67
            buffer.append(">\n");
68
            return buffer.toString();
69
        }
70
    }
71

    
72
    private class XMLHelper {
73

    
74
        private StringBuffer buffer = null;
75

    
76
        XMLHelper() {
77
            this.buffer = new StringBuffer();
78
        }
79

    
80
        public XMLHelper append(String tagname) {
81
            this.buffer.append(tagname);
82
            return this;
83
        }
84

    
85
        public XMLHelper append(int indent, String tagname) {
86
            this.indent(indent);
87
            this.buffer.append("<").append(tagname).append(">\n");
88
            return this;
89
        }
90

    
91
        public XMLHelper append(int indent, String tagname, String value) {
92
            if( value==null ) {
93
                value="";
94
            }
95
            this.indent(indent);
96
            buffer.append("<")
97
                    .append(tagname)
98
                    .append(">")
99
                    .append(value)
100
                    .append("</")
101
                    .append(tagname)
102
                    .append(">\n");
103
            return this;
104
        }
105
        
106
        public XMLHelper close(int indent, String tagname) {
107
            this.indent(indent);
108
            this.buffer.append("</").append(tagname).append(">\n");
109
            return this;
110
        }
111
        
112
        public XMLHelper close(int indent, XMLTag tag) {
113
            this.close(indent, tag.getTagname());
114
            return this;
115
        }
116

    
117
        public XMLTag createTag(String tagname) {
118
            return new XMLTag(tagname);
119
        }
120
        
121
        public XMLHelper append(int indent, XMLTag tag) {
122
            this.indent(indent);
123
            this.buffer.append(tag.toString());
124
            return this;
125
        }
126
        
127
        private void indent(int indent) {
128
            if( indent<1 ) {
129
                return;
130
            }
131
            String spaces = "                                                                      ";
132
            if( indent*2 > spaces.length() ) {
133
                this.buffer.append(spaces);
134
            } else {
135
                this.buffer.append(spaces.substring(0, indent*2));
136
            }
137
        }
138

    
139
        @Override
140
        public String toString() {
141
            return this.buffer.toString();
142
        }        
143
    }
144

    
145
    public void exportSimpleDefinition(File out, DynClass dynClass) throws FileNotFoundException {
146
        FileOutputStream os = new FileOutputStream(out);
147
        exportSimpleDefinition(os, dynClass);
148
    }
149

    
150
    public void exportSimpleDefinition(OutputStream out, DynClass dynClass) {
151
        PrintStream writer = null;
152
        try {
153
            writer = new PrintStream(out);
154
            writer.print( exportSimpleDefinition(dynClass));
155
        } finally {
156
            writer.close();
157
        }
158
    }
159
    
160
    public String exportSimpleDefinition(DynClass dynClass) {
161

    
162
        int indent = 0;
163
        XMLHelper buffer = new XMLHelper();
164

    
165
        buffer.append("<?xml version=\"1.0\"?>\n");
166
        buffer.append(indent++, DEFINITIONS_TAG);
167
        buffer.append(indent, VERSION_TAG, "1.0.0");
168
        buffer.append(indent++, CLASSES_TAG);
169

    
170
        XMLTag tag = buffer.createTag(CLASS_TAG);
171
        tag.set(CLASS_NAME_TAG, dynClass.getName());
172
        buffer.append(indent++, tag);
173
        
174
        buffer.append(indent++, CLASS_EXTENDS_TAG);
175
        DynClass[] superDynClasses = dynClass.getSuperDynClasses();
176
        if( superDynClasses!=null ) {
177
            for( int i=0; i<superDynClasses.length; i++ ) {
178
                DynClass superDynClass = superDynClasses[i];
179
                tag = buffer.createTag(CLASS_EXTENDS_CLASS_TAG);
180
                tag.set(CLASS_NAMESPACE_TAG, superDynClass.getNamespace());
181
                tag.set(CLASS_NAME_TAG, superDynClass.getName());
182
                buffer.append(indent, tag);
183
            }
184
        }
185
        buffer.close(--indent, CLASS_EXTENDS_TAG);
186
        
187
        buffer.append(indent, CLASS_DESCRIPTION_TAG, dynClass.getDescription());
188
        
189
        buffer.append(indent++, CLASS_FIELDS_TAG);
190
        
191
        DynField[] fields = dynClass.getDeclaredDynFields();
192
        for( int ifields=0; ifields<fields.length; ifields++ ) {
193
            DynField field = fields[ifields];
194
            tag = buffer.createTag(FIELD_TAG);
195
            tag.set(FIELD_NAME_TAG, field.getName());
196
            tag.set(FIELD_TYPE_TAG, field.getDataType().getName());
197
            tag.set(FIELD_ISMANDATORY_TAG, field.isMandatory());
198
            tag.set(FIELD_MINVALUE_TAG, field.getMinValue());
199
            tag.set(FIELD_MAXVALUE_TAG, field.getMaxValue());
200
            tag.set(FIELD_DEFAULTVALUE_TAG, field.getDefaultValue());
201
            tag.set(FIELD_GROUP_TAG, field.getGroup());
202
            tag.set(FIELD_ORDER_TAG, field.getOder());
203
            tag.set(FIELD_HIDDEN_TAG, field.isHidden());
204
            tag.set(FIELD_READONLY_TAG, field.isReadOnly());
205

    
206
            buffer.append(indent++, tag);
207
            
208
            buffer.append(indent,FIELD_DESCRIPTION_TAG, field.getDescription());
209
            DynObjectValueItem[] values = field.getAvailableValues();
210
            if( values!=null && values.length>0 ) {
211
                buffer.append(indent++,FIELD_AVALILABLEVALUES_TAG);
212
                for( int ivalues=0; ivalues<values.length; ivalues++ ) {
213
                    DynObjectValueItem value = values[ivalues];
214
                    tag = buffer.createTag(VALUEITEM_VALUE_TAG);
215
                    tag.set(VALUEITEM_LABEL_TAG, value.getLabel());
216
                    tag.set(VALUEITEM_VALUE_TAG, value.getValue());
217
                    buffer.append(indent, tag);
218
                    buffer.close(indent,tag);
219
                }
220
                buffer.close(++indent,FIELD_AVALILABLEVALUES_TAG);
221
            }
222
            
223
            buffer.close(--indent, FIELD_TAG);
224

    
225
        }
226
        
227
        buffer.close(--indent, CLASS_FIELDS_TAG);
228
        
229
        buffer.close(--indent, CLASS_TAG);
230
        buffer.close(--indent, CLASSES_TAG);
231
        buffer.close(indent, DEFINITIONS_TAG);
232

    
233
        return buffer.toString();
234
    }
235
}