Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.library / org.gvsig.raster / org.gvsig.raster.lib / org.gvsig.raster.lib.buffer.impl / src / main / java / org / gvsig / raster / lib / buffer / impl / operations / DefaultOperationListEntry.java @ 43803

History | View | Annotate | Download (6.93 KB)

1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright ? 2007-2017 gvSIG Association
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.raster.lib.buffer.impl.operations;
24

    
25
import java.util.ArrayList;
26
import java.util.HashMap;
27
import java.util.Iterator;
28
import java.util.List;
29
import java.util.Map;
30
import java.util.Map.Entry;
31
import java.util.Set;
32

    
33
import org.apache.commons.lang3.StringUtils;
34

    
35
import org.gvsig.raster.lib.buffer.api.BufferLocator;
36
import org.gvsig.raster.lib.buffer.api.BufferManager;
37
import org.gvsig.raster.lib.buffer.api.OperationManager;
38
import org.gvsig.raster.lib.buffer.api.operations.Operation;
39
import org.gvsig.raster.lib.buffer.api.operations.OperationList;
40
import org.gvsig.raster.lib.buffer.api.operations.OperationListEntry;
41
import org.gvsig.tools.ToolsLocator;
42
import org.gvsig.tools.dynobject.DynClass;
43
import org.gvsig.tools.dynobject.DynField;
44
import org.gvsig.tools.dynobject.DynField_v2;
45
import org.gvsig.tools.dynobject.DynObject;
46
import org.gvsig.tools.dynobject.DynObjectManager;
47
import org.gvsig.tools.dynobject.DynStruct;
48
import org.gvsig.tools.dynobject.impl.DefaultDynObjectManager;
49
import org.gvsig.tools.persistence.PersistenceManager;
50
import org.gvsig.tools.persistence.PersistentState;
51
import org.gvsig.tools.persistence.exception.PersistenceException;
52

    
53

    
54
/**
55
 * @author fdiaz
56
 *
57
 */
58
public class DefaultOperationListEntry implements OperationListEntry {
59

    
60
    /**
61
     * Persistence definition name
62
     */
63
    public static final String PERSISTENT_NAME = "OperationListEntryPersistence";
64
    /**
65
     * Description of persistence definition
66
     */
67
    public static final String PERSISTENT_DESCRIPTION = "Persistence definition of operation list entry";
68

    
69
    private final static String OPERATION_PERSISTENCE_FIELD = "operations";
70
    private final static String PARAMETERS_PERSISTENCE_FIELD = "parameters";
71
    private final static String IS_ACTIVE_PERSISTENCE_FIELD = "active";
72

    
73
    private Operation operation;
74
    private DynObject parameters;
75
    private boolean active;
76

    
77
    private Map<String, String> lookupParameters;
78

    
79
    /**
80
     * @param operation
81
     * @param parameters
82
     *
83
     */
84
    public DefaultOperationListEntry(Operation operation, DynObject parameters) {
85
        this.operation = operation;
86
        this.parameters = parameters;
87
        this.active = true;
88
    }
89

    
90
    /* (non-Javadoc)
91
     * @see org.gvsig.raster.lib.buffer.api.operations.OperationListEntry#getOperation()
92
     */
93
    @Override
94
    public Operation getOperation() {
95
        return this.operation;
96
    }
97

    
98
    /* (non-Javadoc)
99
     * @see org.gvsig.raster.lib.buffer.api.operations.OperationListEntry#getParameters()
100
     */
101
    @Override
102
    public DynObject getParameters() {
103
        return this.parameters;
104
    }
105

    
106
    /* (non-Javadoc)
107
     * @see org.gvsig.raster.lib.buffer.api.operations.OperationListEntry#isActive()
108
     */
109
    @Override
110
    public boolean isActive() {
111
        return this.active;
112
    }
113

    
114
    /* (non-Javadoc)
115
     * @see org.gvsig.raster.lib.buffer.api.operations.OperationListEntry#setActive(boolean)
116
     */
117
    @Override
118
    public void setActive(boolean active) {
119
        this.active = active;
120
    }
121

    
122

    
123
    @Override
124
    public void saveToState(PersistentState state) throws PersistenceException {
125
        state.set(OPERATION_PERSISTENCE_FIELD, this.getOperation().getFactory().getName());
126
        state.set(PARAMETERS_PERSISTENCE_FIELD, this.getParameters());
127
        state.set(IS_ACTIVE_PERSISTENCE_FIELD, this.isActive());
128

    
129
    }
130

    
131
    @Override
132
    public void loadFromState(PersistentState state) throws PersistenceException {
133
        OperationManager operationManager = BufferLocator.getOperationManager();
134

    
135
        String name = state.getString(OPERATION_PERSISTENCE_FIELD);
136
        operation = operationManager.createOperation(name);
137

    
138
        parameters = ((DynObject) state.get(PARAMETERS_PERSISTENCE_FIELD));
139

    
140
        operationManager.createOperationListEntry(operation, parameters);
141

    
142
        active = ((Boolean) state.get(IS_ACTIVE_PERSISTENCE_FIELD));
143
    }
144

    
145
    public static void registerPersistence() {
146
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
147
        DynStruct definition = manager.getDefinition(PERSISTENT_NAME);
148
        if (definition == null) {
149
            definition =
150
                manager.addDefinition(DefaultOperationList.class, PERSISTENT_NAME,
151
                    PERSISTENT_DESCRIPTION, null, null);
152
            definition.addDynFieldString(OPERATION_PERSISTENCE_FIELD).setMandatory(true);
153
            definition.addDynField(PARAMETERS_PERSISTENCE_FIELD).setMandatory(true).setClassOfValue(DynObject.class);
154
            definition.addDynFieldBoolean(IS_ACTIVE_PERSISTENCE_FIELD).setMandatory(false).setDefaultFieldValue(true);
155
        }
156
    }
157

    
158
    @Override
159
    public String getLookpupParameterName(String name) {
160
        return getLookupParameters().get(name);
161
    }
162

    
163
    @Override
164
    public Map<String, String> getLookupParameters() {
165
        if(this.lookupParameters==null){
166
            this.lookupParameters = new HashMap<>();
167
            DynClass paramsDefinition = parameters.getDynClass();
168
            DynField[] fields = paramsDefinition.getDynFields();
169
            for (int i = 0; i < fields.length; i++) {
170
                DynField_v2 field = (DynField_v2) fields[i];
171
                String name = (String) field.getTags().get("lookupParameter");
172
                if( !StringUtils.isEmpty(name) ) {
173
                    this.lookupParameters.put(field.getName(), name);
174
                }
175
            }
176
        }
177
        return this.lookupParameters;
178
    }
179

    
180
    @Override
181
    public Object clone() throws CloneNotSupportedException {
182
        DynClass dynClass = parameters.getDynClass();
183
        DynObject clonedParameters = DefaultDynObjectManager.getManager().createDynObject(dynClass);
184
        DynField[] dynFields = dynClass.getDynFields();
185
        for (int i = 0; i < dynFields.length; i++) {
186
            String name = dynFields[i].getName();
187
            clonedParameters.setDynValue(name, parameters.getDynValue(name));
188
        }
189

    
190
        OperationListEntry cloned = new DefaultOperationListEntry(operation.getFactory().create(), clonedParameters);
191
        cloned.setActive(isActive());
192

    
193
        return cloned;
194
    }
195

    
196
}