Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.metadata.basic / org.gvsig.metadata.basic.swing / org.gvsig.metadata.swing.basic.impl / src / main / java / org / gvsig / metadata / swing / basic / impl / BasicJMetadataPanel.java @ 40608

History | View | Annotate | Download (6 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2010 Infrastructures and Transports Department
4
 * of the Valencian Gobernment (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2011 Institute of New Imaging Technologies (INIT): 
26
 *   http://www.init.uji.es
27
 * Geographic Information research group: 
28
 *   http://www.geoinfo.uji.es
29
 * Universitat Jaume I UJI, Spain
30
 */
31
package org.gvsig.metadata.swing.basic.impl;
32

    
33
import java.awt.BorderLayout;
34
import java.awt.Component;
35
import java.util.HashMap;
36
import java.util.Map;
37

    
38
import javax.swing.JComponent;
39
import javax.swing.JLabel;
40
import javax.swing.JPanel;
41
import javax.swing.JScrollPane;
42

    
43
import org.gvsig.metadata.Metadata;
44
import org.gvsig.metadata.MetadataLocator;
45
import org.gvsig.metadata.MetadataManager;
46
import org.gvsig.metadata.exceptions.MetadataException;
47
import org.gvsig.metadata.swing.basic.api.AbstractSimpleMetadataPanel;
48
import org.gvsig.metadata.swing.basic.api.JMetadataPanel;
49
import org.gvsig.metadata.swing.basic.api.MetadataSwingManager;
50
import org.gvsig.tools.dynobject.DynStruct;
51
import org.gvsig.tools.dynobject.exception.DynObjectValidateException;
52
import org.gvsig.tools.service.ServiceException;
53
import org.gvsig.tools.swing.api.dynobject.JDynObjectComponent;
54

    
55
public class BasicJMetadataPanel extends JMetadataPanel {
56

    
57
    private static final long serialVersionUID = 6514865354393558940L;
58
    private JLabel lblName;
59
    private MetadataManager manager;
60
    private JDynObjectComponent component;
61
    private JComponent inputComponent;
62
    private Map nodeList;
63
    private Map nodeComponentsList;
64

    
65
        public BasicJMetadataPanel(MetadataSwingManager uiManager,
66
                        Metadata metadata, boolean editable) {
67
                super(uiManager, metadata, editable);
68
    }
69

    
70
    protected void initManagers() {
71
        manager = MetadataLocator.getMetadataManager();
72
    }
73

    
74
    protected void initData() {
75
        String metadataName = "";
76
        if (!this.hasMetadata())
77
            return;
78

    
79
        try {
80

    
81
            metadataName = getMetadata().getMetadataName();
82
            this.lblName.setText("Metadata Layer of " + metadataName + ":");
83

    
84
        } catch (MetadataException e) {
85
            // TODO Auto-generated catch block
86
            e.printStackTrace();
87
        }
88
    }
89
   
90

    
91
    protected void initUI() {
92
        this.setLayout(new BorderLayout());
93
        this.lblName = new JLabel();
94

    
95
        this.add(this.lblName, BorderLayout.NORTH);
96
    }
97

    
98
        public void saveMetadata() throws DynObjectValidateException {
99
        try {
100
            this.component.saveStatus();
101
                        Metadata theNewMetadata = (Metadata) this.component.getValue();
102
                        this.getMetadata().getDynClass().validate(theNewMetadata);
103
            manager.storeMetadata(this.getMetadata());
104
        } catch (MetadataException e) {
105
            e.printStackTrace();
106
        }
107
    }
108
    
109
    public void setMetadata(Metadata metadata) {
110

    
111
        // Metadata ids must be different if both are not null
112
//        if (((this.hasMetadata()) && (this.getMetadata() != null) && (this.getMetadata()
113
//            .getDynClass().getFullName().equals(metadata.getDynClass()
114
//            .getFullName())))) {
115
//            return;
116
//        }
117
        if (inputComponent != null) {
118
            this.remove(inputComponent);
119
        }
120
        
121
        super.setMetadata(metadata);
122

    
123
        createMetadataComponent(metadata, true);
124
        
125
    }
126

    
127

    
128
    protected AbstractSimpleMetadataPanel createMetadataComponent(Metadata metadata, boolean refresh) {
129
        if (metadata == null){
130
            metadata = getMetadata();
131
        }
132
        
133
        try {
134
           
135
            component = (JDynObjectComponent) getNodeElements().get(metadata.getDynClass());
136
            inputComponent =
137
                (JComponent) getComponentElements().get(metadata.getDynClass());
138

    
139
            if (!((component != null)&&(refresh==false))) {
140
                                component = createJDynObjectComponent(
141
                        getMetadata().getDynClass(), getMetadata(), true);
142

    
143
            }else{
144
                component.setValue(metadata);                
145
            }
146
            inputComponent = component.asJComponent();
147
            putElement(getMetadata().getDynClass(), component);
148
            putComponent(getMetadata().getDynClass(), inputComponent);
149

    
150
            if (getMetadata() != null) {
151
                this.add(createJScrollPane(inputComponent));
152
            }
153

    
154
            this.updateUI();
155
        } catch (ServiceException e) {
156
            // TODO Auto-generated catch block
157
            e.printStackTrace();
158
        }
159
        return this;
160
    }
161

    
162
    private Component createJScrollPane(JComponent inputComponent) {
163
        if (inputComponent instanceof JPanel) {
164
            return new JScrollPane(inputComponent);
165
        }
166
        return inputComponent;
167
    }
168

    
169
    private Map getNodeElements() {
170
        if (nodeList == null) {
171
            nodeList = new HashMap();
172
        }
173
        return nodeList;
174
    }
175

    
176
    private void putElement(DynStruct metadata, JDynObjectComponent component) {
177

    
178
        getNodeElements().put(metadata, component);
179
    }
180

    
181
    private void putComponent(DynStruct metadata, JComponent component) {
182

    
183
        getComponentElements().put(metadata, component);
184
    }
185

    
186
    private Map getComponentElements() {
187
        if (nodeComponentsList == null) {
188
            nodeComponentsList = new HashMap();
189
        }
190
        return nodeComponentsList;
191
    }
192
}