Revision 49

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleCREditingProviderFactory.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 *
4
 * Project  : DiSiD org.gvsig.vectorediting.lib.prov.circle2P
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.lib.prov.circlecr;
8

  
9
import org.gvsig.fmap.geom.Geometry;
10
import org.gvsig.tools.ToolsLocator;
11
import org.gvsig.tools.dynobject.DynClass;
12
import org.gvsig.tools.dynobject.DynObject;
13
import org.gvsig.tools.service.spi.AbstractProviderFactory;
14
import org.gvsig.tools.service.spi.Provider;
15
import org.gvsig.tools.service.spi.ProviderServices;
16
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
17
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
18
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceinfo;
19
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
20

  
21
public class CircleCREditingProviderFactory extends AbstractProviderFactory
22
    implements EditingProviderFactory {
23

  
24
  public static final String PROVIDER_NAME = "insert-circle-cr";
25

  
26
  private final static String PROVIDER_DESCRIPTION = "Creates circles from the center and radius";
27

  
28
  public static final String PROVIDER_NAME_PARAMS = "CircleCRParams";
29

  
30
  public static final String PROVIDER_NAME_PARAMS_DESCRIPTION = "";
31

  
32
  private DynClass dynclass;
33

  
34
  public void initialize() {
35
    dynclass = ToolsLocator.getDynObjectManager().createDynClass(
36
        PROVIDER_NAME_PARAMS, PROVIDER_NAME_PARAMS_DESCRIPTION);
37

  
38
    dynclass.addDynFieldString(PROVIDER_NAME_FIELD);
39
    dynclass.addDynFieldObject(FEATURE_STORE_FIELD);
40

  
41
  }
42

  
43
  public EditingServiceInfo getServiceInfo() {
44
    EditingServiceInfo serviceInfo = new DefaultEditingServiceinfo(
45
        PROVIDER_NAME,
46
        "",
47
        true,
48
        null,
49
        null,
50
        new int[]{
51
        		Geometry.TYPES.SURFACE,
52
        		Geometry.TYPES.MULTISURFACE,
53
        		Geometry.TYPES.CURVE,
54
        		Geometry.TYPES.MULTICURVE});
55

  
56
    return serviceInfo;
57
  }
58

  
59
  public EditingServiceParameter getServiceParameterInfo() {
60
    // TODO Auto-generated method stub
61
    return null;
62
  }
63

  
64
  @Override
65
  protected Provider doCreate(DynObject parameters, ProviderServices services) {
66
    return new CircleCREditingProvider(services, parameters);
67
  }
68

  
69
  public DynObject createParameters() {
70
    DynObject dynobject = ToolsLocator.getDynObjectManager().createDynObject(
71
        dynclass);
72

  
73
    dynobject.setDynValue(PROVIDER_NAME_FIELD, PROVIDER_NAME);
74
    return dynobject;
75
  }
76

  
77
  @Override
78
  protected DynClass createParametersDynClass() {
79
    return null;
80
  }
81

  
82
  public String getName() {
83
    return this.PROVIDER_NAME;
84
  }
85

  
86
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/src/main/java/org/gvsig/vectorediting/lib/prov/circlecr/CircleCREditingProvider.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 *
4
 * Project  : DiSiD org.gvsig.vectorediting.lib.prov.circle2P
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.lib.prov.circlecr;
8

  
9
import java.util.ArrayList;
10
import java.util.HashMap;
11
import java.util.List;
12
import java.util.Map;
13

  
14
import org.gvsig.fmap.dal.feature.FeatureStore;
15
import org.gvsig.fmap.geom.Geometry;
16
import org.gvsig.fmap.geom.aggregate.MultiCurve;
17
import org.gvsig.fmap.geom.aggregate.MultiSurface;
18
import org.gvsig.fmap.geom.exception.CreateGeometryException;
19
import org.gvsig.fmap.geom.primitive.Arc;
20
import org.gvsig.fmap.geom.primitive.Circle;
21
import org.gvsig.fmap.geom.primitive.Point;
22
import org.gvsig.fmap.geom.type.GeometryType;
23
import org.gvsig.tools.dynobject.DynObject;
24
import org.gvsig.tools.service.spi.ProviderServices;
25
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
26
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
27
import org.gvsig.vectorediting.lib.spi.AbstractEditingProvider;
28
import org.gvsig.vectorediting.lib.spi.DefaultEditingServiceParameter;
29
import org.gvsig.vectorediting.lib.spi.EditingProvider;
30
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
31
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

  
35
public class CircleCREditingProvider extends AbstractEditingProvider implements
36
    EditingProvider {
37

  
38
  private static final Logger logger = LoggerFactory.getLogger(CircleCREditingProvider.class);
39

  
40
  private EditingServiceParameter center = new DefaultEditingServiceParameter(
41
      "Center", "Center position of circle", TYPE.POSITION);
42

  
43
  private EditingServiceParameter radius = new DefaultEditingServiceParameter(
44
      "Radius", "Radius of circle", TYPE.VALUE);
45

  
46
  private Map<EditingServiceParameter, Object> values;
47

  
48
  private FeatureStore featureStore;
49

  
50
  public CircleCREditingProvider(ProviderServices providerServices,
51
      DynObject parameters) {
52
    super(providerServices);
53
    this.featureStore = (FeatureStore) parameters
54
        .getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
55
  }
56

  
57
  public Geometry draw(Point mousePosition) {
58
    if (values.get(center) != null) {
59
      Point centerPoint = (Point) values.get(center);
60
      return createCircle(centerPoint, mousePosition, featureStore);
61
    }
62

  
63
    return null;
64

  
65
  }
66

  
67
  public EditingServiceParameter next() {
68
    if (values.get(center) == null) {
69
      return this.center;
70
    }
71
    else if (values.get(radius) == null) {
72
      return this.radius;
73
    }
74
    return null;
75
  }
76

  
77
  public void stop(){
78

  
79
  }
80

  
81
  public boolean isValidValue(EditingServiceParameter param, Object value) {
82
	  if (param ==center){
83
		  if (value instanceof Point) {
84
			  return true;
85
		  }
86
	  } else if (param == radius) {
87
		  if (value instanceof Point) {
88
			  return true;
89
		  } else if (value instanceof String) {
90
			  //TODO:
91

  
92
		  }
93
	  }
94
    return false;
95
  }
96

  
97
  public List<EditingServiceParameter> getParameters() {
98
    List<EditingServiceParameter> list = new ArrayList<EditingServiceParameter>();
99
    list.add(center);
100
    list.add(radius);
101
    return list;
102
  }
103

  
104
  public void value(Object value) {
105
    EditingServiceParameter param = next();
106
    if (isValidValue(param, value)) {
107
      values.put(param, value);
108
    }
109
  }
110

  
111
  public void finish() {
112
    Point centerPoint = (Point) values.get(center);
113
    double radiusValue = ((Double)values.get(radius)).doubleValue();
114
    GeometryType storeGeomType = getGeomType(featureStore);
115
    Geometry geometry = null;
116
    if(storeGeomType.isTypeOf(SURFACE)){
117
		geometry = createCircle(centerPoint, radiusValue, featureStore);
118
		((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
119
    } else if(storeGeomType.isTypeOf(CURVE)){
120
		geometry = createArc(centerPoint, radiusValue, 0, 2*Math.PI, featureStore);
121
		((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
122
    } else if(storeGeomType.isTypeOf(MULTISURFACE)){
123
		geometry = createCircle(centerPoint, radiusValue, featureStore);
124
		MultiSurface multisurface;
125
		try {
126
			multisurface = geomManager.createMultiSurface(storeGeomType.getSubType());
127
			multisurface.addSurface((Circle)geometry);
128
		    ((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(multisurface, featureStore);
129
		} catch (CreateGeometryException e) {
130
			logger.error("Can't create multisurface", e);
131
			((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
132
		}
133
	} else if(storeGeomType.isTypeOf(MULTICURVE)){
134
		geometry = createArc(centerPoint, radiusValue, 0, 2*Math.PI, featureStore);
135
		MultiCurve multicurve;
136
		try {
137
			multicurve = geomManager.createMultiCurve(storeGeomType.getSubType());
138
			multicurve.addCurve((Arc)geometry);
139
		    ((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(multicurve, featureStore);
140
		} catch (CreateGeometryException e) {
141
			logger.error("Can't create multisurface", e);
142
			((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
143
		}
144

  
145
    } else {
146
		((EditingProviderServices) getProviderServices()).insertGeometryIntoFeatureStore(geometry, featureStore);
147
	}
148
  }
149

  
150
  public void start() {
151
    this.values = new HashMap<EditingServiceParameter, Object>();
152
  }
153

  
154
  public String getName() {
155
    return CircleCREditingProviderFactory.PROVIDER_NAME;
156
  }
157

  
158
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.circlecr/pom.xml
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
  <modelVersion>4.0.0</modelVersion>
3
  <parent>
4
    <groupId>org.gvsig</groupId>
5
    <artifactId>org.gvsig.vectorediting.lib.prov</artifactId>
6
    <version>1.0.0-SNAPSHOT</version>
7
  </parent>
8
  <artifactId>org.gvsig.vectorediting.lib.prov.circle2P</artifactId>
9
  <name>org.gvsig.vectorediting.lib.prov.circle2P</name>
10
</project>
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/pom.xml
10 10
	<packaging>pom</packaging>
11 11
	<modules>
12 12
		<module>org.gvsig.vectorediting.lib.prov.insertpoint</module>
13
		<module>org.gvsig.vectorediting.lib.prov.circle2P</module>
13
		<module>org.gvsig.vectorediting.lib.prov.circlecr</module>
14 14
	</modules>
15 15
	<dependencies>
16 16
		<dependency>
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.spi/src/main/java/org/gvsig/vectorediting/lib/spi/DefaultEditingServiceParameter.java
16 16

  
17 17
  private TYPE type;
18 18
  
19
  public DefaultEditingServiceParameter(String name, String desciption, TYPE position) {
19
  public DefaultEditingServiceParameter(String name, String description, TYPE position) {
20 20
    this.name = name;
21
    this.description = desciption;
21
    this.description = description;
22 22
    this.type = position; //TODO Check type
23 23
  }
24 24

  

Also available in: Unified diff