AW: AW: [udig-devel] objectProperty
Starke, Dirk
Dirk.Starke at prodv.de
Tue May 6 05:30:28 PDT 2008
Hello Ingmar,
it's just a couple of days ago when I faced that problem. Please have a look at http://udig.refractions.net/confluence/display/DEV/What+should+I+put+in+as+the+target+for+my+operation
Here is a code snippet showing how to deal with the target object. It is configured to work on targetClass "java.lang.Object".
public void op(Display display, Object target, IProgressMonitor monitor) throws Exception {
if (target instanceof IMap) {
IMap map = (IMap) target;
IEditManager editManager = map.getEditManager();
ILayer selectedLayer = editManager.getSelectedLayer();
opOnLayer(display, selectedLayer, monitor);
}
else if (target instanceof ILayer) {
opOnLayer(display, (ILayer) target, monitor);
}
else if (target instanceof IAdaptable) {
ILayer layer = (ILayer) ((IAdaptable) target).getAdapter(ILayer.class);
opOnLayer(display, layer, monitor);
}
else if (target instanceof Object[]) {
Object[] targetArray = (Object[]) target;
if (targetArray.length > 0) {
Object realTarget = targetArray[0];
if (realTarget instanceof IMap) {
IMap map = (IMap) realTarget;
IEditManager editManager = map.getEditManager();
ILayer selectedLayer = editManager.getSelectedLayer();
opOnLayer(display, selectedLayer, monitor);
}
else if (realTarget instanceof ILayer) {
ILayer layer = (ILayer) realTarget;
opOnLayer(display, layer, monitor);
}
else if (realTarget instanceof IAdaptable) {
ILayer layer = (ILayer) ((IAdaptable) realTarget).getAdapter(ILayer.class);
opOnLayer(display, layer, monitor);
}
}
}
else {
final String MSG = "Data could not be identified.";
display.syncExec(new ShowMessageDialogRunnable(display, "uDIGEval", MSG,
MessageDialog.INFORMATION));
}
}
Hope this helps.
Regards,
Dirk
-----Ursprüngliche Nachricht-----
Von: udig-devel-bounces at lists.refractions.net
[mailto:udig-devel-bounces at lists.refractions.net]Im Auftrag von Jesse
Eichar
Gesendet: Dienstag, 6. Mai 2008 08:42
An: User-friendly Desktop Internet GIS
Betreff: Re: AW: [udig-devel] objectProperty
Hi, The way that eclipse work is most plugins are lazily loaded.
Only the XML is loaded. So the more information you can put in the
xml the later the plugin can be loaded which both increases memory and
takes time.
So the idea with target class is to look at the current selection and
see all the elements in the selection are of the target class type.
For example if you have a property that requires a layer to validate
its property then you put ILayer as the target property. This way if
a map is selected then the property plugin won't be called and the
property won't be called... Or rather it will automatically resolve to
false.
So I guess it has 2 purposes. 1. Improve performance and 2. declare
what objects can be passed to the property object.
Jesse
On 5-May-08, at 7:20 PM, Ingmar Eveslage wrote:
> Hello Dirk, hello Jesse,
>
> thanks. This works. realy a bit confusing, but it worked.
>
> Can you explain me, what the target class is? or exactly which
> objects gets evaluated against the property class?
>
> i tried, java.lang.Object and net.refractions.udig.project.ILayer.
> The second i copied from the udig project. it works realy good, but
> who managed the objects which are put in the
>
> public boolean isTrue(ILayer object, String value)
>
> function?
>
> <object
> targetClass="java.lang.Object">
> <property
>
> class="de.hub.sam.es.managementclient.tool.StationProperty"
> id="isStationProperty">
> </property>
> </object>
> <object
> targetClass="net.refractions.udig.project.ILayer">
> <property
>
> class="de.hub.sam.es.managementclient.tool.LayerFeatureTypeProperty"
> id="LayerFeatureTypeProperty">
> </property>
> </object>
>
> thanks for explaining.
>
> greats ingmar
>
> Am 05.05.2008 um 12:03 schrieb Starke, Dirk:
>
>> Hello Ingmar,
>>
>> you have to reference your property including the full path of your
>> plugin.
>>
>> Example: Let's say your plugin's name is "my.udig.plugin", then
>> (even when referencing a property declared in the same plugin) you
>> have to write the following:
>>
>> ...
>> <enablement>
>> <property
>> expectedValue="StationFeatureType"
>> propertyId="my.udig.plugin.isStationProperty">
>> </property>
>> </enablement>
>> ...
>>
>> Regards,
>> Dirk
>>
>>
>> -----Ursprüngliche Nachricht-----
>> Von: udig-devel-bounces at lists.refractions.net
>> [mailto:udig-devel-bounces at lists.refractions.net]Im Auftrag von
>> Ingmar
>> Eveslage
>> Gesendet: Sonntag, 4. Mai 2008 01:18
>> An: User-friendly Desktop Internet GIS
>> Betreff: [udig-devel] objectProperty
>>
>>
>> Hello,
>>
>> first: i use the sdk rc14
>>
>> i try to implement a extension for
>> net.refractions.udig.project.ui.tool. this should only be enabled if
>> some conditions a true. so i tried to implement this.
>>
>> the plugin.xml:
>>
>> <extension
>> point="net.refractions.udig.project.ui.tool">
>> <actionTool
>> class=".managementclient.tool.LeaderNodeAction"
>> icon="icons/16x16/leader.png"
>> id="managementclient.tool.LeaderNodeAction"
>> name="LeaderSelection"
>> onToolbar="true"
>> tooltip="switch leader entity on/off">
>> <enablement>
>> <property
>> expectedValue="StationFeatureType"
>> propertyId="isStationProperty">
>> </property>
>> </enablement>
>> </actionTool>
>> </extension>
>>
>> <extension
>> point="net.refractions.udig.ui.objectProperty">
>> <object
>> targetClass="java.lang.Object">
>> <property
>> class="managementclient.tool.StationProperty"
>> id="isStationProperty">
>> </property>
>> </object>
>> </extension>
>>
>> a very early implementation of the objectProperty interface:
>>
>> package managementclient.tool;
>>
>> import net.refractions.udig.project.ui.ApplicationGIS;
>> import net.refractions.udig.ui.operations.AbstractPropertyValue;
>> import net.refractions.udig.ui.operations.PropertyValue;
>>
>> @SuppressWarnings("unchecked")
>> public class StationProperty extends AbstractPropertyValue implements
>> PropertyValue {
>>
>> public StationProperty() {
>> // TODO Auto-generated constructor stub
>> }
>>
>> public boolean canCacheResult() {
>> // TODO Auto-generated method stub
>> return false;
>> }
>>
>> public boolean isBlocking() {
>> // TODO Auto-generated method stub
>> return false;
>> }
>>
>> public boolean isTrue(Object object, String value) {
>> if (ApplicationGIS.getActiveMap()==ApplicationGIS.NO_MAP)
>> return false;
>> return true;
>> }
>> }
>>
>> The problem is: when i start i get this error message and the tool is
>> always on:
>>
>> !ENTRY net.refractions.udig.ui 1 0 2008-05-04 01:09:31.152
>> !MESSAGE PropertyParser: Parsing PropertyValue, desired Propert:
>> isStationProperty not found. Referenced in plugin: managementclient
>>
>> what is going wrong? i hope somebody has an idea.
>>
>> Thanks forward
>>
>> Ingmar
>> _______________________________________________
>> 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
More information about the udig-devel
mailing list