Hi!

Sorry about the last email - interface spazout.

> Question 2: I have declared my feature type schema to have a second 
> attribute to hold a string. But at the time I create the Feature, I 
> don't know the value of this field yet.
> I assume I can programmatically add this data later? (From Vitali's
> email I was a little concerned).
>>>You can change/update the attributes any time.  You just can't change

>>>the FeatureType definition like you can a table in a database.

OK, I give up. 
How do I get the datastore and hence the Feature Type back out of an
existing Layer.
I have been searching arounf the API of Layer and IGeoResource etc. 
I just can't figure it out.
I am probably missing the obvious.

Michelle.

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Jesse
Eichar
Sent: 20 March 2006 17:47
To: User-friendly Desktop Internet GIS
Subject: Re: [udig-devel] Shapefiles



On 20-Mar-06, at 6:08 AM, M.S.Bachler wrote:

> Hi!
>
> I feel I have finally made a break through in understanding some of
> the
> uDig code I have been writing.
> This is what I think each bit of my code for creating a new  
> shapefile is
> effectively doing, when equated to databases terminology:
>
> // LIKE: CREATING A NEW DATABASE IndexedShapefileDataStoreFactory fac 
> = new IndexedShapefileDataStoreFactory();
> String sShapeFile = file2.getAbsolutePath();
> ShapefileDataStore ds = (ShapefileDataStore) fac.createDataStore(new
> URL("file://"+sShapeFile));
>
> // LIKE: CREATING A DATABASE TABLE SCHEMA
> // FIELD NAME = "the_icon"
> // DATAYPE FOR FIELD = Point.class
> AttributeType geomAttr = 
> AttributeTypeFactory.newAttributeType("the_icon", Point.class); 
> AttributeType linkAttr = 
> AttributeTypeFactory.newAttributeType("the_link", String.class);
>
>                       
> // LIKE: CREATING THE NEW TABLE
> // TABLE SCHEMA, TABLE NAME
> FeatureType featureType = FeatureTypeBuilder.newFeatureType(new
> AttributeType[] {geomAttr, linkAttr}, sBaseLayerName+"-"+sFileName);
>       
>
> // LIKE: CREATING THE DATA FOR A NEW RECORD IN THE TABLE
>
> GeometryFactory geomFactory = new GeometryFactory(); Coordinate coord 
> = new Coordinate(event.x, event.y); Point point = 
> geomFactory.createPoint(coord);
>
> String sLink = "comp_test";
>
> // LIKE: ADDING THE A RECORD TO THE TABLE
> Feature newRecord = featureType.create(new Object[] {point, sLink}, 
> "the_recordID");
>
> // LIKE: ADDING THE TABLE TO THE DATABASE
> ds.createSchema( featureType);
>
>
> Question 1: Can anyone confirm that I have understood this right 
> process?
Sounds like you are on the right track
>
> Question 2: I have declared my feature type schema to have a second 
> attribute to hold a string. But at the time I create the Feature, I 
> don't know the value of this field yet.
> I assume I can programmatically add this data later? (From Vitali's
> email I was a little concerned).
You can change/update the attributes any time.  You just can't change  
the FeatureType definition like you can a table in a database.
>
> Question 3: Is adding a new point to an existing layer (of the type 
> described above), just involve create a new record in the table? In 
> other words doing this line again with an existing FeatureType for the
> Layer:
>
> "Feature newRecord = featureType.create(new Object[] {point, sLink}, 
> "the_recordID");"
>
Yup
> Thanks
>
> Michelle
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Jesse 
> Eichar
> Sent: 16 March 2006 18:10
> To: User-friendly Desktop Internet GIS
> Subject: Re: [udig-devel] Shapefiles
>
>
>
> On 16-Mar-06, at 4:59 AM, M.S.Bachler wrote:
>
>> Hi!
>>
>> I know can get the x,y which is great. Thanks.
>>
>> I have had a first attempt at creating a shapefile and adding a new 
>> layer connecting to the shape file, for the first time you drop a 
>> specific icon on a map (subsequent times you add it to an existing 
>> layer
>> - which is the next step).
>>
>> I have pieced together code from various emails but still think I
>> have
>
>> not really got a complete picture of what I am doing. The code I
>> have,
>
>> creates a shape file (I can see the files are there), it also adds a 
>> layer to the map (I can see the layer in the list), but it has an 
>> error
>> - 'Connection to Resource Failed'.
>> I am also not sure if the Point code is right?
>>
>> Here is my code: Any thoughts anyone about what I am doing wrong? (or

>> how I could simplify it?)
>>
>> try {
>>      IndexedShapefileDataStoreFactory fac = new 
>> IndexedShapefileDataStoreFactory();
>>      File file2 = new
>> File("Ecosensus"+EcosensusPlugin.sFS
>> +"Shapefiles"+EcosensusPlugin.sFS+sF
>> ileName+".shp");
>>      String sShapeFile = file2.getAbsolutePath();
>>      ShapefileDataStore ds = (ShapefileDataStore)
> fac.createDataStore(new
>> URL("file://"+sShapeFile));
>
>>      try {
>>              AttributeType geomAttr = 
>> AttributeTypeFactory.newAttributeType("the_geom", Point.class);
>>              FeatureType featureType =
> FeatureTypeBuilder.newFeatureType(new
>> AttributeType[] {geomAttr}, "icon");
>>                                                      
>>              GeometryFactory geomFactory = new GeometryFactory();
>>              Coordinate coord = new Coordinate(event.x, event.y);
>>              Point point = geomFactory.createPoint(coord);
>>              Feature theIcon = featureType.create(new Object[]
>> {point}, "myicon");                                                  
>>                                      
>>              ds.createSchema( featureType );
>>                                                              
>>              List<IService> services = 
>> CatalogPlugin.getDefault().getServiceFactory().acquire(new
>> URL("file://"+sShapeFile));
>>              IService service = services.get(0);
>>                                                      
>>              List resources = service.members(monitor);
>>              IGeoResource resource = (IGeoResource)resources.get(0);
>>
> I think the problem is here.  the acquire method is tricky.  It 
> creates a service and georesource but does not necessarily add it to 
> the catalog.  Once you have the service make sure you add it to the
> catalog:
>
> CatalogPlugin.getDefault().getLocalCatalog().add(service);
>
>>              System.out.println("resource type = 
>> "+resource.getClass().getName());
>>      
>>
>>              Layer newLayer = factory.createLayer(resource);
>>              newLayer.setName(sFileName);
>>              map.sendCommandASync( (new AddLayerCommand(newLayer)) );
>>                                                                      
>>              DrawCommandFactory factory2 =
> DrawCommandFactory.getInstance();
>>              DrawFeatureCommand cmd =
factory2.createDrawFeatureCommand(theIcon, 
>> crs);
>>              map.sendCommandASync(cmd);
>>
>>                                                                      
>>      } catch (IllegalAttributeException e) {
>>              System.out.println("IllegalAttributeException");
>>              e.printStackTrace();
>>      } catch(SchemaException se) {
>>              System.out.println("SchemaException");
>>              se.printStackTrace();
>>      }
>>
>> } catch (IOException e) {
>>      e.printStackTrace();
>> }
>>
>> Michelle
>>
>> -----Original Message-----
>> From: [EMAIL PROTECTED]
>> [mailto:[EMAIL PROTECTED] On Behalf Of Jesse 
>> Eichar
>> Sent: 14 March 2006 20:30
>> To: User-friendly Desktop Internet GIS
>> Subject: Re: [udig-devel] Shapefiles
>>
>>
>> Here's the interface (I added some comments today as well :P):
>>
>> /**
>> *
>> * Defines the behaviour when a drag and drop event occurs.  The 
>> extension declaration combined with the accepts method
>> * determines whether the Action will be ran for a given drag/drop 
>> event.
>> *
>> * @author jdeolive
>> * @since 1.0.0
>> */
>> public abstract class IDropAction {
>>      
>>      public static final String XPID = 
>> "net.refractions.udig.ui.dropAction"; //$NON-NLS-1$
>>      
>>      /** the extension info **/
>>      IConfigurationElement element;
>>      
>>      private Object destination;
>>
>>      private Object data;
>>
>>      private DropTargetEvent event;
>>
>>      private int location;
>>      
>>      /**
>>       * Returns the Configuration element that definates the
>> action in
>
>> the extension declaration.
>>       *
>>       * @return the Configuration element that definates the
>> action in
>
>> the extension declaration.
>>       */
>>      public IConfigurationElement getElement() {
>>              return element;
>>      }
>>      
>>      /**
>>       * Returns the name of the action.
>>       *
>>       * @return Returns the name of the action.
>>       */
>>      public String getName() {
>>              if (element == null)
>>                      return ""; //$NON-NLS-1$
>>              return element.getAttribute("name"); //$NON-NLS-1$
>>      }
>>      
>>      /**
>>       * Called if the action seems to be a good candidate for
>> handling
>
>> the drop event.
>>       *
>>       * @return true if the action this it should handle the drop 
>> event.
>>       */
>>      public abstract boolean accept();
>>      
>>      /**
>>       * Performs the drop action.
>>       *
>>       * @param monitor a progress monitor for showing the progress of

>> the current event.
>>       */
>>      public abstract void perform(IProgressMonitor monitor);
>>
>>      /**
>>       * Returns the dropped data.
>>       *
>>       * @return the dropped data.
>>       */
>>      public Object getData() {
>>          return data;
>>      }
>>
>>      /**
>>       * Returns the object that the data was dropped on.
>>       *
>>       * @return the object that the data was dropped on.
>>       */
>>      public Object getDestination() {
>>          return destination;
>>      }
>>
>>      /**
>>       * Called by framework to initialize the action.
>>       *
>>       * @param element2 the extension configuration element
>>       * @param event2 the drop event.
>>       * @param destination2 the object that the data was dropped on.
>>       * @param data2 the data that was dropped.
>>       */
>>      public void init( IConfigurationElement element2,
>> DropTargetEvent
>
>> event2, int location2,
>>              Object destination2, Object data2 ) {
>>          this.element=element2;
>>          this.event=event2;
>>          this.location=location2;
>>          this.destination=destination2;
>>          this.data=data2;
>>      }
>>
>>      /**
>>       * The drop event.
>>       * @return Returns the drop event.
>>       */
>>      public DropTargetEvent getEvent() {
>>          return event;
>>      }
>>
>>      /**
>>       * This does not always make sense for the drop event.  But in 
>> the case that the component is a jface viewer then this method will 
>> indicate the
>>       * location where the drop is taking place (before, on or after 
>> the destination object).
>>       *
>>       * @see ViewerDropAdapter#getCurrentLocation()
>>       *
>>       * @return If the component is not a viewer this will always 
>> return [EMAIL PROTECTED] ViewerDropAdapter#LOCATION_ON} otherwise it will be 
>> one

>> of the LOCATION_*
>>       * values.
>>       */
>>      public int getViewerLocation() {
>>          return location;
>>      }
>>
>> }
>>
>> Jesse
>>
>>
>> On 14-Mar-06, at 12:22 PM, M.S.Bachler wrote:
>>
>>> Hi!
>>>
>>> That's great.
>>> (I thought it was just me being really thick, and not spotting
>>> how to
>
>>> get the x,y).
>>>
>>> Thanks for adding these changes.
>>>
>>> I still can't download the source code at the moment - we do use a 
>>> proxy and I have a feeling it must be blocking some of the command 
>>> Subversion needs - I will see IT tomorrow about it.
>>>
>>> As I can't get to the source code - are there any javadocs on these 
>>> changes so I know what methods/variables are now available.
>>>
>>> Thanks
>>>
>>>
>>> Michelle
>>>
>>> -----Original Message-----
>>> From: [EMAIL PROTECTED]
>>> [mailto:[EMAIL PROTECTED] On Behalf Of Jesse

>>> Eichar
>>> Sent: 14 March 2006 19:08
>>> To: User-friendly Desktop Internet GIS
>>> Subject: Re: [udig-devel] Shapefiles
>>>
>>>
>>> Ok so a change of plans.
>>>
>>> I've changed the API slightly.  Shouldn't bother you too much, all 
>>> the
>>
>>> information is still there in the IDropAction class, now I've added 
>>> the getEvent() method to the IDropAction class.  It has the x,y 
>>> location of the event.
>>>
>>> I think I've cleaned things up a little so you shouldn't have to 
>>> worry
>>
>>> about any other classes besides the IDropAction (before the 
>>> UDIGDropHandler was accessible from the IDropAction)  I've changed 
>>> that but made sure that all the information is still available in
>>> the
>
>>> IDropAction.
>>>
>>>
>>> Jesse
>>>
>>> On 14-Mar-06, at 9:33 AM, Jesse Eichar wrote:
>>>
>>>> Truthfully this is a good question.  I think you've identified 
>>>> another short coming of this API.  I am going to make 3 changes to 
>>>> UDIGDropHandler.
>>>>
>>>> 1.  I'm going to change getLocation to return a Point which will be

>>>> the x,y coordinates of the drop event relative to the component
>>>> that
>
>>>> the component is dropped on. 2.  I'm going to add the method
>>>> getViewerLocation() that will return ON, BEFORE and AFTER
>>>> locations.
>>
>>>> (That is what getLocation() currently does)
>>>> 3.  I'm going to add a method isViewer() so you can determine if
>>>> the
>
>>>> control is a viewer and if you should use getViewerLocation() or 
>>>> getLocation().
>>>>
>>>> You'll have to download tonights nightly build.
>>>>
>>>> (Sorry for the hard time you are having but DND has been a real 
>>>> headache for me to figure out, never mind do right)
>>>>
>>>> Jesse
>>>>
>>>> On 14-Mar-06, at 2:19 AM, M.S.Bachler wrote:
>>>>
>>>>> Hi
>>>>>
>>>>> Sorry about yesterdays rant.
>>>>>
>>>>> If you have not lost all patients with me, I would really 
>>>>> appreciate
>>
>>>>> it if anyone could tell me how I get the x, y coordinates of the 
>>>>> drop from my IDropAction class.
>>>>>
>>>>> Thanks
>>>>>
>>>>> Michelle
>>>>>
>>>>> -----Original Message-----
>>>>> From: [EMAIL PROTECTED]
>>>>> [mailto:[EMAIL PROTECTED] On Behalf Of 
>>>>> M.S.Bachler
>>>>> Sent: 13 March 2006 11:04
>>>>> To: User-friendly Desktop Internet GIS
>>>>> Subject: RE: [udig-devel] Shapefiles
>>>>>
>>>>>
>>>>> Hi!
>>>>>
>>>>> Thanks everyone for your various inputs.
>>>>> I am still not sure what I am doing (I have decided I am just 
>>>>> thick!).
>>>>>
>>>>> I can't see how the DataUtility way or creating a FeatureType 
>>>>> passes
>>
>>>>> in the x,y of the point. Then again, I can't even figure out how I

>>>>> get the x, y coordinates of the drop from my IDropAction class in 
>>>>> order to create the coords for my Point class in the first
>>>>> place? I
>
>>>>> have run around the API, but can't figure it out.
>>>>>
>>>>> Is there really no example code out there that I can study to help

>>>>> me
>>>
>>>>> understand things better. I am unable to download the source code 
>>>>> with Subversion (I did write to the list about this but no one 
>>>>> replied). I need the equivalent of "uDig for Dummies" book.
>>>>>
>>>>> Being a Java developer for many years I thought this project would

>>>>> be
>>>
>>>>> relatively easy. But I think having no familiarity with Eclipse or

>>>>> GIS at all, has really not helped me. While Eclipse is becoming 
>>>>> more familiar, 'GIS speak' is still a mistery. I think what seems
>>>>> obvious to
>>>>> many of you when talking about the code, just escapes me.
>>>>>
>>>>> I know people are reluctant to spoon feed me the code I need. I 
>>>>> know
>>
>>>>> I need to go through the pain barrier and try and understand it
>>>>> all
>
>>>>> myself. But it really hurts, and for various reasons the timescale

>>>>> of my project has been shrunk, and I am in danger (for the first 
>>>>> time in my lief!), of not completing something, and having to say 
>>>>> I can't do it.
>>>>>
>>>>> I think I have just not reached that eureka moment, when
>>>>> everything
>
>>>>> suddenly clicks into place. I hope it happens soon! I still have a

>>>>> head full of floating jigsaw pieces.
>>>>>
>>>>> Meanwhile, if someone could help me with how I get the x,y of the 
>>>>> drop, that would be great.
>>>>>
>>>>> Michelle - ( with a heavy cold - feeling rather sorry for
>>>>> myself :-
>
>>>>> ( - going to get a cup of tea )
>>>>>
>>>>> -----Original Message-----
>>>>> From: [EMAIL PROTECTED]
>>>>> [mailto:[EMAIL PROTECTED] On Behalf Of
>>>>> Jody
>
>>>>> Garnett
>>>>> Sent: 11 March 2006 08:58
>>>>> To: User-friendly Desktop Internet GIS
>>>>> Subject: Re: [udig-devel] Shapefiles
>>>>>
>>>>>
>>>>> You guys are working to hard, I wrote a parser method I never 
>>>>> wanted
>>
>>>>> to do this stuff twice.
>>>>> - http://udig.refractions.net/docs/api-geotools/org/geotools/data/
>>>>> DataUtil
>>>>> ities.html
>>>>>
>>>>> The format is silly, but it is in the javadocs:
>>>>> - http://udig.refractions.net/docs/api-geotools/org/geotools/data/
>>>>> DataUtil
>>>>> ities.html#createType(java.lang.String,%20java.lang.String)
>>>>>
>>>>> basically: 
>>>>> "name:String,age:Number,position:Point,*destination:Point"
>>>>> Where the * indicates the default geometry ..
>>>>>
>>>>> Other useful stuff:
>>>>> - http://udig.refractions.net/docs/api-geotools/org/geotools/
>>>>> feature/
>>>>> Featu
>>>>> reTypes.html
>>>>>
>>>>> Jody
>>>>>>
>>>>>>
>>>>>> M.S.Bachler wrote:
>>>>>>>
>>>>>>> Hi!
>>>>>>>
>>>>>>> Silly question.
>>>>>>>
>>>>>>> Earlier you helpfully gave me a code snippet to create a new 
>>>>>>> shapefile.
>>>>>>>
>>>>>>> IndexedShapefileDatastoreFactory fac=new 
>>>>>>> IndexedShapefileDataStoreFactory();
>>>>>>>
>>>>>>> ShapefileDataStore ds=fac.createDatastore(url);
>>>>>>>
>>>>>>> // I assume this is the URL of the new shapefile I want it to 
>>>>>>> create?
>>>>>>>
>>>>>>> GeometryFactory gf = new GeometryFactory();
>>>>>>>
>>>>>>> ds.createSchema( featureType );
>>>>>>>
>>>>>>> // Here I got lost. Started to investigate FeatureType and felt 
>>>>>>> like I was walking through tar.
>>>>>>>
>>>>>> I did some stuff with FeatureType the other day... trying to 
>>>>>> create
>>
>>>>>> a new Feature from scratch. Here is the code I found to create a 
>>>>>> new
>>>>>> FeatureType:
>>>>>>                     AttributeType geomAttr =
>>>>> AttributeTypeFactory.newAttributeType("the_geom",
>>>>> LineString.class);
>>>>>>                     FeatureType ftRoad =
>>>>> FeatureTypeBuilder.newFeatureType(new AttributeType[] {geomAttr}, 
>>>>> "road");
>>>>>>
>>>>>>     //                WKTReader wktReader = new WKTReader();
>>>>>>     //                Point geometry = (Point) wktReader.read
>>>>>> ("POINT
>>>>> (" + lat + " " + lon + ")");
>>>>>>                     GeometryFactory geomFactory = new
>>>>> GeometryFactory();
>>>>>>                     LineString geometry =
>>>>> geomFactory.createLineString(coords);
>>>>>>                     Feature theRoad = ftRoad.create(new Object[] 
>>>>>> {geometry}, "myRoad");
>>>>>>
>>>>>>
>>>>>> This example Feature only has one attribute which is the
>>>>>> geometry,
>
>>>>>> the_geom. You can create and add other attributes in the 
>>>>>> AttributType[] and Object[] if needed.
>>>>>>
>>>>>> These classes are from the org.geotools.feature package.
>>>>>>
>>>>>> Hopefully you may find this useful. I'm not sure if this is the 
>>>>>> most
>>>
>>>>>> up-to-date way of doing it, but it worked for me.
>>>>>>
>>>>>> Mark
>>>>>>
>>>>>> --
>>>>>> This message has been scanned for viruses and dangerous
>>>>>> content by
>>>>>> *MailScanner* <http://www.mailscanner.info/>, and is believed
>>>>>> to be
>>
>>>>>> clean. _______________________________________________
>>>>>> User-friendly Desktop Internet GIS (uDig) 
>>>>>> http://udig.refractions.net 
>>>>>> http://lists.refractions.net/mailman/listinfo/udig-devel
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> User-friendly Desktop Internet GIS (uDig) http:// 
>>>>> udig.refractions.net 
>>>>> http://lists.refractions.net/mailman/listinfo/udig-devel
>>>>> _______________________________________________
>>>>> User-friendly Desktop Internet GIS (uDig) 
>>>>> http://udig.refractions.net 
>>>>> http://lists.refractions.net/mailman/listinfo/udig-devel
>>>>> _______________________________________________
>>>>> User-friendly Desktop Internet GIS (uDig) 
>>>>> http://udig.refractions.net 
>>>>> http://lists.refractions.net/mailman/listinfo/udig-devel
>>>>
>>>> _______________________________________________
>>>> User-friendly Desktop Internet GIS (uDig) http:// 
>>>> udig.refractions.net
>>
>>>> http://lists.refractions.net/mailman/listinfo/udig-devel
>>>
>>> _______________________________________________
>>> User-friendly Desktop Internet GIS (uDig) http://
>>> udig.refractions.net
>
>>> http://lists.refractions.net/mailman/listinfo/udig-devel
>>> _______________________________________________
>>> User-friendly Desktop Internet GIS (uDig) http://
>>> udig.refractions.net
>
>>> http://lists.refractions.net/mailman/listinfo/udig-devel
>>
>> _______________________________________________
>> User-friendly Desktop Internet GIS (uDig) http://udig.refractions.net

>> http://lists.refractions.net/mailman/listinfo/udig-devel
>> _______________________________________________
>> User-friendly Desktop Internet GIS (uDig) http://udig.refractions.net

>> http://lists.refractions.net/mailman/listinfo/udig-devel
>
> _______________________________________________
> User-friendly Desktop Internet GIS (uDig) http://udig.refractions.net 
> http://lists.refractions.net/mailman/listinfo/udig-devel
> _______________________________________________
> User-friendly Desktop Internet GIS (uDig) http://udig.refractions.net
> http://lists.refractions.net/mailman/listinfo/udig-devel

_______________________________________________
User-friendly Desktop Internet GIS (uDig) http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel

Reply via email to