2010/6/3 Larry Becker <becker.la...@gmail.com>
> Hi Benjamin,
>
> Are you running Groovy from within OJ as we do BeanScript and Jython, or
> are you importing the OJ classes to create Groovy programs?
>
I use Groovy the same way as you use Java (importing the OJ classes).
I put groovy-all-1.7.0.jar (ca. 5 MB) into OpenJUMP's /lib directory and
develop OJ plugins with Eclipse (using the amazing Groovy-Eclipse Plugin,
NetBeans and IntelliJ IDEA). You can use Java classes in Groovy classes and
vice versa (Groovy files are compiled into .class files). Thus you can even
use Groovy classes from the BeanShell or Jython.
Since my two classes (mentioned previously) require Groovy Closures as
method parameters, it is necessary to call their methods within a groovy
file (these two classes are special cases).
Here is a HelloWorldPlugIn in Groovy:
<pre>
import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn
import com.vividsolutions.jump.workbench.plugin.PlugInContext
import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller
class HelloWorldPlugIn extends AbstractPlugIn {
void initialize(PlugInContext pluginContext) {}
boolean execute(PlugInContext pluginContext) {
def pluginPath = pluginContext.getWorkbenchContext().getWorkbench().
getPlugInManager().getPlugInDirectory().getAbsolutePath()
def htmlFrame = pluginContext.getWorkbenchFrame().getOutputFrame()
htmlFrame.setTitle("Hello, World!")
htmlFrame.createNewDocument()
htmlFrame.addText("Hello, World!")
htmlFrame.addText(pluginPath.toString())
htmlFrame.surface()
return true
}
}
</pre>
Another funny thing is, you can copy your Java code into a Groovy file and
it compiles.
--Benjamin
>
> Larry
>
>
> On Wed, Jun 2, 2010 at 9:43 AM, Benjamin Gudehus <hasteb...@googlemail.com
> > wrote:
>
>> Hi!
>>
>> I wrote a FeatureCollectionBuilder and a FeatureCollectionSchemaEditor for
>> that in Groovy using the Builder design pattern (
>> http://groovy.codehaus.org/Builders).
>>
>> Look at this example code (from the unit tests). You can add and remove
>> Attributes to the FeatureSchema.
>>
>> <pre>
>> private featureCollection
>>
>> def setup() {
>> this.featureCollection = new FeatureCollectionBuilder().build {
>> schema {
>> attribute("id", AttributeType.INTEGER)
>> attribute("name", AttributeType.STRING)
>> }
>> features {
>> feature(id: 1, name: "foo")
>> feature(id: 2, name: "bar")
>> feature(id: 3, name: "baz")
>> feature(id: 4, name: "quux")
>> }
>> }
>> }
>>
>> def "Add an attribute to the FeatureSchema"() {
>> when:
>> def collectionEditor = new
>> FeatureCollectionSchemaEditor(this.featureCollection)
>> collectionEditor.modifySchema {
>> addSchemaAttribute("street", AttributeType.STRING)
>> }
>>
>> then:
>> def newFeatureSchema =
>> collectionEditor.getFeatureCollection().getFeatureSchema()
>> collectionEditor.getAttributeNames(newFeatureSchema) == ["id", "name",
>> "street"]
>> }
>> </pre>
>>
>> If somebody wants to use it, I can upload the sourcecode (but it depends
>> on the groovy jar).
>>
>> 2010/6/2 Larry Becker <becker.la...@gmail.com>
>>
>> For tips on how to do this see:
>>> http://sourceforge.net/apps/mediawiki/jump-pilot/index.php?title=Extending_a_FeatureCollection_by_Adding_new_Attributes
>>>
>>>
>>> On Wed, Jun 2, 2010 at 9:17 AM, Larry Becker <becker.la...@gmail.com>wrote:
>>>
>>>> Hi Caroline,
>>>>
>>>> You seem to be making progress on your project. Your current problem
>>>> is that when you alter a schema it only affects new features. You need to
>>>> replace the old schema in each feature with the new one before copying
>>>> attributes.
>>>>
>>>> regards,
>>>> Larry
>>>>
>>>> 2010/6/2 Caroline Julliê Freitas Ribeiro <krolj...@gmail.com>
>>>>
>>>>> I tried to put a new attribute to a old Feature, I altered the Schema
>>>>> but looks like the size of the array whete stay the data of the Feature is
>>>>> not actualized.
>>>>>
>>>>> I got the following Stack trace:
>>>>>
>>>>> java.lang.ArrayIndexOutOfBoundsException: 3
>>>>> at
>>>>> com.vividsolutions.jump.feature.BasicFeature.getAttribute(BasicFeature.java:82)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.LayerTableModel$4.getValue(LayerTableModel.java:170)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.LayerTableModel$MyColumn.getValueAt(LayerTableModel.java:75)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.ColumnBasedTableModel.getValueAt(ColumnBasedTableModel.java:141)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.GUIUtil.chooseGoodColumnWidths(GUIUtil.java:408)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.AttributeTablePanel.initColumnWidths(AttributeTablePanel.java:415)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.AttributeTablePanel.<init>(AttributeTablePanel.java:307)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.AttributePanel.addTablePanel(AttributePanel.java:154)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.AttributePanel.layerAdded(AttributePanel.java:136)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.AttributeTab$5.layerAdded(AttributeTab.java:143)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.InfoModel.add(InfoModel.java:88)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.cursortool.FeatureInfoTool.gestureFinished(FeatureInfoTool.java:81)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.cursortool.AbstractCursorTool.fireGestureFinished(AbstractCursorTool.java:446)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.cursortool.SpecifyFeaturesTool.mouseClicked(SpecifyFeaturesTool.java:95)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.cursortool.LeftClickFilter.mouseClicked(LeftClickFilter.java:81)
>>>>> at
>>>>> com.vividsolutions.jump.workbench.ui.cursortool.DelegatingTool.mouseClicked(DelegatingTool.java:97)
>>>>> at
>>>>> java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
>>>>> at java.awt.Component.processMouseEvent(Component.java:6266)
>>>>> at
>>>>> javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
>>>>> at java.awt.Component.processEvent(Component.java:6028)
>>>>> at java.awt.Container.processEvent(Container.java:2041)
>>>>> at java.awt.Component.dispatchEventImpl(Component.java:4630)
>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2099)
>>>>> at java.awt.Component.dispatchEvent(Component.java:4460)
>>>>> at
>>>>> java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
>>>>> at
>>>>> java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
>>>>> at
>>>>> java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
>>>>> at java.awt.Container.dispatchEventImpl(Container.java:2085)
>>>>> at java.awt.Window.dispatchEventImpl(Window.java:2475)
>>>>> at java.awt.Component.dispatchEvent(Component.java:4460)
>>>>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
>>>>> at
>>>>> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
>>>>> at
>>>>> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
>>>>> at
>>>>> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
>>>>> at
>>>>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
>>>>> at
>>>>> java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
>>>>> at
>>>>> java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
>>>>>
>>>>> This is the code where I got the problem:
>>>>>
>>>>> Layer l = (Layer)cboLayers.getSelectedItem();
>>>>> FeatureCollectionWrapper col = l.getFeatureCollectionWrapper();
>>>>> FeatureSchema schema = col.getFeatureSchema();
>>>>> instalEsquema(schema,rs);
>>>>> List lista =col.getFeatures();
>>>>> while (rs.next()){
>>>>> for(Object o: lista){
>>>>> Feature f = (Feature) o;
>>>>> Feature fNew;
>>>>> String att =
>>>>> f.getAttribute(cboAtributos.getSelectedItem().toString()).toString();
>>>>> if (att.equals(rs.getString(txtCampo.getText()))){
>>>>> for(int i
>>>>> =nroAtributosAntes;i<schema.getAttributeCount();i++){
>>>>> f.setAttribute(i,
>>>>> rs.getString(schema.getAttributeName(i))); //Here is the problem
>>>>> }
>>>>> }
>>>>> }
>>>>> }
>>>>>
>>>>> private void instalEsquema(FeatureSchema schema, ResultSet rs)
>>>>> throws SQLException {
>>>>> //Here everything works fine....
>>>>> nroAtributosAntes = schema.getAttributeCount();
>>>>> ResultSetMetaData meta = rs.getMetaData();
>>>>> for(int i =1;i<=meta.getColumnCount();i++){
>>>>> schema.addAttribute(meta.getColumnLabel(i),
>>>>> AttributeType.STRING);
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>> Thanks
>>>>>
>>>>> --
>>>>> Caroline Julliê de Freitas Ribeiro
>>>>> Graduando em Análise e Desenvolvimento de Sistemas
>>>>>
>>>>> Instituto Federal Minas Gerais - IFMG
>>>>> Campus Bambuí
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Jump-pilot-devel mailing list
>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>
>>>>>
>>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>>
>>> _______________________________________________
>>> Jump-pilot-devel mailing list
>>> Jump-pilot-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>>
>>
>> _______________________________________________
>> Jump-pilot-devel mailing list
>> Jump-pilot-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>
>>
>
>
> ------------------------------------------------------------------------------
> ThinkGeek and WIRED's GeekDad team up for the Ultimate
> GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
> lucky parental unit. See the prize list and enter to win:
> http://p.sf.net/sfu/thinkgeek-promo
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>
>
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the
lucky parental unit. See the prize list and enter to win:
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel