Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » [CDO] NPEx when setLayoutConstraint on GMF editors
[CDO] NPEx when setLayoutConstraint on GMF editors [message #650510] Tue, 25 January 2011 11:04 Go to next message
Ugo Sangiorgi is currently offline Ugo SangiorgiFriend
Messages: 59
Registered: January 2010
Member
Hi all, I'm getting this on my Dawn/GMF editor. My editor is not refreshed, but when saved, the other editors are refreshed properly:

java.lang.NullPointerException
at org.eclipse.gef.editparts.AbstractGraphicalEditPart.setLayou tConstraint(AbstractGraphicalEditPart.java:906)
at org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart.r efreshBounds(ShapeEditPart.java:197)
at org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart.r efreshVisuals(ShapeEditPart.java:205)
at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractE ditPart.java:717)
at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh( AbstractGraphicalEditPart.java:633)
at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.access$3(GraphicalEditPart.java:1)
at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt$3.run(GraphicalEditPart.java:861)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.runExclusive(TransactionalEditingDomainImpl.java:328)
at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.refresh(GraphicalEditPart.java:851)
at org.eclipse.emf.cdo.dawn.util.DawnDiagramUpdater.refeshEditp artInternal(DawnDiagramUpdater.java:142)
at org.eclipse.emf.cdo.dawn.util.DawnDiagramUpdater.refeshEditp artInternal(DawnDiagramUpdater.java:167)
at org.eclipse.emf.cdo.dawn.util.DawnDiagramUpdater.refeshEditp artInternal(DawnDiagramUpdater.java:167)
at org.eclipse.emf.cdo.dawn.util.DawnDiagramUpdater.refreshEdit Part(DawnDiagramUpdater.java:72)
at org.eclipse.emf.cdo.dawn.util.DawnDiagramUpdater$2.run(DawnD iagramUpdater.java:83)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.runExclusive(TransactionalEditingDomainImpl.java:328)
at org.eclipse.emf.cdo.dawn.util.DawnDiagramUpdater.refreshEdit Part(DawnDiagramUpdater.java:79)
at org.eclipse.emf.cdo.dawn.notifications.impl.DawnGMFHandler.r efresh(DawnGMFHandler.java:275)
at org.eclipse.emf.cdo.dawn.notifications.impl.DawnGMFHandler.m odifyingObject(DawnGMFHandler.java:115)
at org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl. registerFeatureDelta(CDOTransactionImpl.java:1514)
at org.eclipse.emf.internal.cdo.view.CDOStateMachine$WriteNewTr ansition.execute(CDOStateMachine.java:819)
at org.eclipse.emf.internal.cdo.view.CDOStateMachine$WriteNewTr ansition.execute(CDOStateMachine.java:1)
at org.eclipse.net4j.util.fsm.FiniteStateMachine.process(Finite StateMachine.java:162)
at org.eclipse.emf.internal.cdo.view.CDOStateMachine.writeWitho utViewLock(CDOStateMachine.java:386)
at org.eclipse.emf.internal.cdo.view.CDOStateMachine.write(CDOS tateMachine.java:371)
at org.eclipse.emf.internal.cdo.view.CDOStoreImpl.getRevisionFo rWriting(CDOStoreImpl.java:621)
at org.eclipse.emf.internal.cdo.view.CDOStoreImpl.set(CDOStoreI mpl.java:342)
at org.eclipse.emf.internal.cdo.object.CDOLegacyAdapter.notifyC hanged(CDOLegacyAdapter.java:83)
at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify (BasicNotifierImpl.java:380)
at org.eclipse.gmf.runtime.notation.impl.ViewImpl.setElement(Vi ewImpl.java:377)
at org.eclipse.sketch.examples.shapes.diagram.providers.ShapesV iewProvider.createUnknown_2003(ShapesViewProvider.java:343)
at org.eclipse.sketch.examples.shapes.diagram.providers.ShapesV iewProvider.createNode(ShapesViewProvider.java:238)
at org.eclipse.gmf.runtime.diagram.core.services.view.CreateNod eViewOperation.execute(CreateNodeViewOperation.java:67)
at org.eclipse.gmf.runtime.common.core.service.ExecutionStrateg y$1.execute(ExecutionStrategy.java:71)
at org.eclipse.gmf.runtime.common.core.service.Service.execute( Service.java:652)
at org.eclipse.gmf.runtime.diagram.core.services.ViewService.ex ecute(ViewService.java:184)
at org.eclipse.gmf.runtime.diagram.core.services.ViewService.cr eateNode(ViewService.java:499)
at org.eclipse.gmf.runtime.diagram.core.services.ViewService.cr eateView(ViewService.java:265)
at org.eclipse.gmf.runtime.diagram.ui.commands.CreateCommand.do ExecuteWithResult(CreateCommand.java:91)
at org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTr ansactionalCommand.doExecute(AbstractTransactionalCommand.ja va:247)
at org.eclipse.emf.workspace.AbstractEMFOperation.execute(Abstr actEMFOperation.java:150)
at org.eclipse.gmf.runtime.common.core.command.CompositeCommand .doExecuteWithResult(CompositeCommand.java:403)
at org.eclipse.gmf.runtime.common.core.command.AbstractCommand. execute(AbstractCommand.java:135)
at org.eclipse.gmf.runtime.common.core.command.CompositeCommand .doExecuteWithResult(CompositeCommand.java:403)
at org.eclipse.gmf.runtime.common.core.command.AbstractCommand. execute(AbstractCommand.java:135)
at org.eclipse.core.commands.operations.DefaultOperationHistory .execute(DefaultOperationHistory.java:511)
at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramCommandStack .execute(DiagramCommandStack.java:206)
at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramCommandStack .execute(DiagramCommandStack.java:169)
at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramCommandStack .execute(DiagramCommandStack.java:156)
at org.eclipse.sketch.examples.shapes.diagram.MyShapesSketchCli ent.createUnknownNode(MyShapesSketchClient.java:213)
at org.eclipse.sketch.examples.shapes.diagram.MyShapesSketchCli ent.receiveNewProcessedSketch(MyShapesSketchClient.java:73)
at org.eclipse.sketch.SketchManager.notifyNewSketch(SketchManag er.java:120)
at org.eclipse.sketch.SketchRecognizer$1.run(SketchRecognizer.j ava:79)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:3 5)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchr onizer.java:134)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.jav a:3515)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :3164)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:24 38)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start (IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(Eclips eAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java: 619)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
at org.eclipse.equinox.launcher.Main.main(Main.java:1383)


thanks a lot!
Ugo
Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #650568 is a reply to message #650510] Tue, 25 January 2011 14:39 Go to previous messageGo to next message
Martin Fluegge is currently offline Martin FlueggeFriend
Messages: 141
Registered: July 2009
Senior Member
> Hi all, I'm getting this on my Dawn/GMF editor. My editor is not refreshed, but when saved, the other editors are refreshed properly:

With "not refreshed" you mean that the element you placed on your diagram is not visible?

Following the excpetion I would say that the getFigure() method from your ShapeEditPart subclass seems to deliver null. Did you customize the method in the affected class?

Could you provide more information about the structuire of the node? Does it have labels or any compartments?

Cheers,

Martin

[Updated on: Tue, 25 January 2011 15:10]

Report message to a moderator

Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #650598 is a reply to message #650568] Tue, 25 January 2011 16:38 Go to previous messageGo to next message
Ugo Sangiorgi is currently offline Ugo SangiorgiFriend
Messages: 59
Registered: January 2010
Member
Exactly, I mean the node is not visible, although the editor gets dirty and all :)
And it only happens with my custom figure, and for creation only (editing labels and moving the node performs fine)

I have two types of nodes:
-Squares/Triangles, which are classic GMF figures.
-Unknown, sketched figures (SVGSketchFigure that is constructed based on a property of the node, which is an svg encoded in base64)


Here is how I create the figure:

protected IFigure createNodeShape() {

Bundle bundle = Platform.getBundle("org.eclipse.sketch.examples.shapes");
try {

NodeImpl n = (NodeImpl) getModel();
Unknown s = (Unknown) n.basicGetElement();

if (s.getSvg() != null) {

IWorkspaceRoot myWorkspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
File imgfile = myWorkspaceRoot.getLocation()
.append("s" + System.currentTimeMillis() + ".svg")
.toFile();

Base64.decodeToFile(s.getSvg(), imgfile.getPath());

RenderedImage img = RenderedImageFactory.getInstance(imgfile.getPath());
img.getRenderInfo().setValues(0, 0, true, true,new RGB(255, 0, 0), new RGB(255, 0, 0));

primaryShape = new SVGSketchFigure(img);

} else {
primaryShape = new SVGSketchFigure(RenderedImageFactory.getInstance(bundle
.getEntry("/icons/square.svg")));
}

} catch (IOException e) {
e.printStackTrace();
}
return primaryShape;

}

....

public class SVGSketchFigure extends ScalableImageFigure {

/**
* @generated
*/
private WrappingLabel fFigureSketchLabelFigure;

/**
* @generated NOT
*/
private RenderedImage image;

/**
* @generated NOT
*/
public SVGSketchFigure() {
super(null, true, true, true);
createContents();
}

/**
* @generated NOT
*/
public SVGSketchFigure(RenderedImage i) {
super(i, true, true, true);

Unknown model = (Unknown) ((ShapeImpl) getModel())
.basicGetElement();
setToolTip(new Label(model.getElement()));

this.image = i;

this.setMaintainAspectRatio(true);

this.setRenderedImage(image);

createContents();

//center the children
this.setLayoutManager(new StackLayout() {
public void layout(IFigure figure) {
Rectangle r = figure.getClientArea();
List children = figure.getChildren();
IFigure child;
Dimension d;
for (int i = 0; i < children.size(); i++) {
child = (IFigure) children.get(i);
d = child.getPreferredSize(r.width, r.height);
d.width = Math.min(d.width, r.width);
d.height = Math.min(d.height, r.height);
Rectangle childRect = new Rectangle(r.x
+ (r.width - d.width) / 2, r.y
+ (r.height - d.height) / 2, d.width, d.height);
child.setBounds(childRect);
}
}
});
}

/**
* @generated NOT
*/
private void createContents() {

fFigureSketchLabelFigure = new WrappingLabel();
fFigureSketchLabelFigure.setAlignment(PositionConstants.CENT ER);
fFigureSketchLabelFigure.setText("");
fFigureSketchLabelFigure.setBackgroundColor(ColorConstants.w hite);

this.add(fFigureSketchLabelFigure);

}

/**
* @generated
*/
public WrappingLabel getFigureSketchLabelFigure() {
return fFigureSketchLabelFigure;
}

}



On 25-01-2011 15:39, Martin Fluegge wrote:
>> Hi all, I'm getting this on my Dawn/GMF editor. My editor is not refreshed, but when saved, the other editors are refreshed properly:
>
> With "not refreshed" you mean that the element you placed on your diagram is not visible?
>
> Following the excpetion I would say that the getFigure() method from your ShapeEditPart subclass seems the deleiver null. Did you customize the cdo in the affected class?
>
> Could you provide more information about the node? Does it have labels or any compartments?
>
> Cheers,
>
> Martin
Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #650653 is a reply to message #650598] Tue, 25 January 2011 20:44 Go to previous messageGo to next message
Martin Fluegge is currently offline Martin FlueggeFriend
Messages: 141
Registered: July 2009
Senior Member
Hi Ugo,

I had a quick look at the problem. I would say that GMF should handle
the call of getFigure() more carefully and not pass the result if it is
null.

But it might also indicate an error in Dawn. Could you please send me
you code (the one with the "Diagram_") or put it on specific branch.

Then I'll try to reproduce the problem to get a better understanding of
what happens.

Cheers,

Martin

Am 25.01.2011 17:38, schrieb Ugo Sangiorgi:
> Exactly, I mean the node is not visible, although the editor gets dirty
> and all :)
> And it only happens with my custom figure, and for creation only
> (editing labels and moving the node performs fine)
>
> I have two types of nodes:
> -Squares/Triangles, which are classic GMF figures.
> -Unknown, sketched figures (SVGSketchFigure that is constructed based on
> a property of the node, which is an svg encoded in base64)
>
>
> Here is how I create the figure:
>
> protected IFigure createNodeShape() {
>
> Bundle bundle =
> Platform.getBundle("org.eclipse.sketch.examples.shapes");
> try {
>
> NodeImpl n = (NodeImpl) getModel();
> Unknown s = (Unknown) n.basicGetElement();
>
> if (s.getSvg() != null) {
>
> IWorkspaceRoot myWorkspaceRoot =
> ResourcesPlugin.getWorkspace().getRoot();
> File imgfile = myWorkspaceRoot.getLocation()
> .append("s" + System.currentTimeMillis() + ".svg")
> .toFile();
>
> Base64.decodeToFile(s.getSvg(), imgfile.getPath());
>
> RenderedImage img =
> RenderedImageFactory.getInstance(imgfile.getPath());
> img.getRenderInfo().setValues(0, 0, true, true,new RGB(255,
> 0, 0), new RGB(255, 0, 0));
>
> primaryShape = new SVGSketchFigure(img);
>
> } else {
> primaryShape = new
> SVGSketchFigure(RenderedImageFactory.getInstance(bundle
> .getEntry("/icons/square.svg")));
> }
>
> } catch (IOException e) {
> e.printStackTrace();
> }
> return primaryShape;
>
> }
>
> ...
>
> public class SVGSketchFigure extends ScalableImageFigure {
>
> /**
> * @generated
> */
> private WrappingLabel fFigureSketchLabelFigure;
>
> /**
> * @generated NOT
> */
> private RenderedImage image;
>
> /**
> * @generated NOT
> */
> public SVGSketchFigure() {
> super(null, true, true, true);
> createContents();
> }
>
> /**
> * @generated NOT
> */
> public SVGSketchFigure(RenderedImage i) {
> super(i, true, true, true);
>
> Unknown model = (Unknown) ((ShapeImpl) getModel())
> .basicGetElement();
> setToolTip(new Label(model.getElement()));
>
> this.image = i;
>
> this.setMaintainAspectRatio(true);
>
> this.setRenderedImage(image);
>
> createContents();
>
> //center the children
> this.setLayoutManager(new StackLayout() {
> public void layout(IFigure figure) {
> Rectangle r = figure.getClientArea();
> List children = figure.getChildren();
> IFigure child;
> Dimension d;
> for (int i = 0; i < children.size(); i++) {
> child = (IFigure) children.get(i);
> d = child.getPreferredSize(r.width, r.height);
> d.width = Math.min(d.width, r.width);
> d.height = Math.min(d.height, r.height);
> Rectangle childRect = new Rectangle(r.x
> + (r.width - d.width) / 2, r.y
> + (r.height - d.height) / 2, d.width,
> d.height);
> child.setBounds(childRect);
> }
> }
> });
> }
>
> /**
> * @generated NOT
> */
> private void createContents() {
>
> fFigureSketchLabelFigure = new WrappingLabel();
>
> fFigureSketchLabelFigure.setAlignment(PositionConstants.CENT ER);
> fFigureSketchLabelFigure.setText("");
>
> fFigureSketchLabelFigure.setBackgroundColor(ColorConstants.w hite);
>
> this.add(fFigureSketchLabelFigure);
>
> }
>
> /**
> * @generated
> */
> public WrappingLabel getFigureSketchLabelFigure() {
> return fFigureSketchLabelFigure;
> }
>
> }
>
>
>
> On 25-01-2011 15:39, Martin Fluegge wrote:
>>> Hi all, I'm getting this on my Dawn/GMF editor. My editor is not
>>> refreshed, but when saved, the other editors are refreshed properly:
>>
>> With "not refreshed" you mean that the element you placed on your
>> diagram is not visible?
>>
>> Following the excpetion I would say that the getFigure() method from
>> your ShapeEditPart subclass seems the deleiver null. Did you customize
>> the cdo in the affected class?
>>
>> Could you provide more information about the node? Does it have labels
>> or any compartments?
>>
>> Cheers,
>>
>> Martin
>
Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #650715 is a reply to message #650598] Wed, 26 January 2011 09:02 Go to previous messageGo to next message
Martin Fluegge is currently offline Martin FlueggeFriend
Messages: 141
Registered: July 2009
Senior Member
Ugo,

sorry, somehow my reply from yesterday got lost Sad

Could you send me you code again (the one with the "Diagram_"). I'tt try to reproduce it and see whether the problem is related to your customization or is Dawn specific.

Cheers,

Martin
Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #650721 is a reply to message #650715] Wed, 26 January 2011 09:29 Go to previous messageGo to next message
Martin Fluegge is currently offline Martin FlueggeFriend
Messages: 141
Registered: July 2009
Senior Member
Darn, seems that the reply did not get lost. So just forget my last post.

Either my browser cache tricked me or I need glasses.

Sorry for the confusion Sad
Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #650722 is a reply to message #650653] Wed, 26 January 2011 09:31 Go to previous messageGo to next message
Ugo Sangiorgi is currently offline Ugo SangiorgiFriend
Messages: 59
Registered: January 2010
Member
Hi Martin,
I've put into github, under the cdo-dawn branch.

The Shapes app projects are under examples
https://github.com/ugosan/sketch/tree/cdo-dawn/examples
and the sketch core plugin is under:
https://github.com/ugosan/sketch/tree/cdo-dawn/plugins

thank you very much for that!
Ugo

On 25-01-2011 21:44, Martin Flügge wrote:
> Hi Ugo,
>
> I had a quick look at the problem. I would say that GMF should handle
> the call of getFigure() more carefully and not pass the result if it is
> null.
>
> But it might also indicate an error in Dawn. Could you please send me
> you code (the one with the "Diagram_") or put it on specific branch.
>
> Then I'll try to reproduce the problem to get a better understanding of
> what happens.
>
> Cheers,
>
> Martin
>
> Am 25.01.2011 17:38, schrieb Ugo Sangiorgi:
>> Exactly, I mean the node is not visible, although the editor gets dirty
>> and all :)
>> And it only happens with my custom figure, and for creation only
>> (editing labels and moving the node performs fine)
>>
>> I have two types of nodes:
>> -Squares/Triangles, which are classic GMF figures.
>> -Unknown, sketched figures (SVGSketchFigure that is constructed based on
>> a property of the node, which is an svg encoded in base64)
>>
>>
>> Here is how I create the figure:
>>
>> protected IFigure createNodeShape() {
>>
>> Bundle bundle =
>> Platform.getBundle("org.eclipse.sketch.examples.shapes");
>> try {
>>
>> NodeImpl n = (NodeImpl) getModel();
>> Unknown s = (Unknown) n.basicGetElement();
>>
>> if (s.getSvg() != null) {
>>
>> IWorkspaceRoot myWorkspaceRoot =
>> ResourcesPlugin.getWorkspace().getRoot();
>> File imgfile = myWorkspaceRoot.getLocation()
>> .append("s" + System.currentTimeMillis() + ".svg")
>> .toFile();
>>
>> Base64.decodeToFile(s.getSvg(), imgfile.getPath());
>>
>> RenderedImage img =
>> RenderedImageFactory.getInstance(imgfile.getPath());
>> img.getRenderInfo().setValues(0, 0, true, true,new RGB(255,
>> 0, 0), new RGB(255, 0, 0));
>>
>> primaryShape = new SVGSketchFigure(img);
>>
>> } else {
>> primaryShape = new
>> SVGSketchFigure(RenderedImageFactory.getInstance(bundle
>> .getEntry("/icons/square.svg")));
>> }
>>
>> } catch (IOException e) {
>> e.printStackTrace();
>> }
>> return primaryShape;
>>
>> }
>>
>> ...
>>
>> public class SVGSketchFigure extends ScalableImageFigure {
>>
>> /**
>> * @generated
>> */
>> private WrappingLabel fFigureSketchLabelFigure;
>>
>> /**
>> * @generated NOT
>> */
>> private RenderedImage image;
>>
>> /**
>> * @generated NOT
>> */
>> public SVGSketchFigure() {
>> super(null, true, true, true);
>> createContents();
>> }
>>
>> /**
>> * @generated NOT
>> */
>> public SVGSketchFigure(RenderedImage i) {
>> super(i, true, true, true);
>>
>> Unknown model = (Unknown) ((ShapeImpl) getModel())
>> .basicGetElement();
>> setToolTip(new Label(model.getElement()));
>>
>> this.image = i;
>>
>> this.setMaintainAspectRatio(true);
>>
>> this.setRenderedImage(image);
>>
>> createContents();
>>
>> //center the children
>> this.setLayoutManager(new StackLayout() {
>> public void layout(IFigure figure) {
>> Rectangle r = figure.getClientArea();
>> List children = figure.getChildren();
>> IFigure child;
>> Dimension d;
>> for (int i = 0; i< children.size(); i++) {
>> child = (IFigure) children.get(i);
>> d = child.getPreferredSize(r.width, r.height);
>> d.width = Math.min(d.width, r.width);
>> d.height = Math.min(d.height, r.height);
>> Rectangle childRect = new Rectangle(r.x
>> + (r.width - d.width) / 2, r.y
>> + (r.height - d.height) / 2, d.width,
>> d.height);
>> child.setBounds(childRect);
>> }
>> }
>> });
>> }
>>
>> /**
>> * @generated NOT
>> */
>> private void createContents() {
>>
>> fFigureSketchLabelFigure = new WrappingLabel();
>>
>> fFigureSketchLabelFigure.setAlignment(PositionConstants.CENT ER);
>> fFigureSketchLabelFigure.setText("");
>>
>> fFigureSketchLabelFigure.setBackgroundColor(ColorConstants.w hite);
>>
>> this.add(fFigureSketchLabelFigure);
>>
>> }
>>
>> /**
>> * @generated
>> */
>> public WrappingLabel getFigureSketchLabelFigure() {
>> return fFigureSketchLabelFigure;
>> }
>>
>> }
>>
>>
>>
>> On 25-01-2011 15:39, Martin Fluegge wrote:
>>>> Hi all, I'm getting this on my Dawn/GMF editor. My editor is not
>>>> refreshed, but when saved, the other editors are refreshed properly:
>>>
>>> With "not refreshed" you mean that the element you placed on your
>>> diagram is not visible?
>>>
>>> Following the excpetion I would say that the getFigure() method from
>>> your ShapeEditPart subclass seems the deleiver null. Did you customize
>>> the cdo in the affected class?
>>>
>>> Could you provide more information about the node? Does it have labels
>>> or any compartments?
>>>
>>> Cheers,
>>>
>>> Martin
>>
>
Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #651092 is a reply to message #650722] Thu, 27 January 2011 17:12 Go to previous messageGo to next message
Martin Fluegge is currently offline Martin FlueggeFriend
Messages: 141
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------030100060102030306030304
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Hi Ugo,

I managed to run your example diagram and played a bit around with it.
The problem was that your customized UnknowEditPart was missing some
null checks. After I added (see attached file) them it seems to work. :)



Cheers,

Martin


Am 26.01.2011 10:31, schrieb Ugo Sangiorgi:
> Hi Martin,
> I've put into github, under the cdo-dawn branch.
>
> The Shapes app projects are under examples
> https://github.com/ugosan/sketch/tree/cdo-dawn/examples
> and the sketch core plugin is under:
> https://github.com/ugosan/sketch/tree/cdo-dawn/plugins
>
> thank you very much for that!
> Ugo
>
> On 25-01-2011 21:44, Martin Flügge wrote:
>> Hi Ugo,
>>
>> I had a quick look at the problem. I would say that GMF should handle
>> the call of getFigure() more carefully and not pass the result if it is
>> null.
>>
>> But it might also indicate an error in Dawn. Could you please send me
>> you code (the one with the "Diagram_") or put it on specific branch.
>>
>> Then I'll try to reproduce the problem to get a better understanding of
>> what happens.
>>
>> Cheers,
>>
>> Martin
>>
>> Am 25.01.2011 17:38, schrieb Ugo Sangiorgi:
>>> Exactly, I mean the node is not visible, although the editor gets dirty
>>> and all :)
>>> And it only happens with my custom figure, and for creation only
>>> (editing labels and moving the node performs fine)
>>>
>>> I have two types of nodes:
>>> -Squares/Triangles, which are classic GMF figures.
>>> -Unknown, sketched figures (SVGSketchFigure that is constructed based on
>>> a property of the node, which is an svg encoded in base64)
>>>
>>>
>>> Here is how I create the figure:
>>>
>>> protected IFigure createNodeShape() {
>>>
>>> Bundle bundle =
>>> Platform.getBundle("org.eclipse.sketch.examples.shapes");
>>> try {
>>>
>>> NodeImpl n = (NodeImpl) getModel();
>>> Unknown s = (Unknown) n.basicGetElement();
>>>
>>> if (s.getSvg() != null) {
>>>
>>> IWorkspaceRoot myWorkspaceRoot =
>>> ResourcesPlugin.getWorkspace().getRoot();
>>> File imgfile = myWorkspaceRoot.getLocation()
>>> .append("s" + System.currentTimeMillis() + ".svg")
>>> .toFile();
>>>
>>> Base64.decodeToFile(s.getSvg(), imgfile.getPath());
>>>
>>> RenderedImage img =
>>> RenderedImageFactory.getInstance(imgfile.getPath());
>>> img.getRenderInfo().setValues(0, 0, true, true,new RGB(255,
>>> 0, 0), new RGB(255, 0, 0));
>>>
>>> primaryShape = new SVGSketchFigure(img);
>>>
>>> } else {
>>> primaryShape = new
>>> SVGSketchFigure(RenderedImageFactory.getInstance(bundle
>>> .getEntry("/icons/square.svg")));
>>> }
>>>
>>> } catch (IOException e) {
>>> e.printStackTrace();
>>> }
>>> return primaryShape;
>>>
>>> }
>>>
>>> ...
>>>
>>> public class SVGSketchFigure extends ScalableImageFigure {
>>>
>>> /**
>>> * @generated
>>> */
>>> private WrappingLabel fFigureSketchLabelFigure;
>>>
>>> /**
>>> * @generated NOT
>>> */
>>> private RenderedImage image;
>>>
>>> /**
>>> * @generated NOT
>>> */
>>> public SVGSketchFigure() {
>>> super(null, true, true, true);
>>> createContents();
>>> }
>>>
>>> /**
>>> * @generated NOT
>>> */
>>> public SVGSketchFigure(RenderedImage i) {
>>> super(i, true, true, true);
>>>
>>> Unknown model = (Unknown) ((ShapeImpl) getModel())
>>> .basicGetElement();
>>> setToolTip(new Label(model.getElement()));
>>>
>>> this.image = i;
>>>
>>> this.setMaintainAspectRatio(true);
>>>
>>> this.setRenderedImage(image);
>>>
>>> createContents();
>>>
>>> //center the children
>>> this.setLayoutManager(new StackLayout() {
>>> public void layout(IFigure figure) {
>>> Rectangle r = figure.getClientArea();
>>> List children = figure.getChildren();
>>> IFigure child;
>>> Dimension d;
>>> for (int i = 0; i< children.size(); i++) {
>>> child = (IFigure) children.get(i);
>>> d = child.getPreferredSize(r.width, r.height);
>>> d.width = Math.min(d.width, r.width);
>>> d.height = Math.min(d.height, r.height);
>>> Rectangle childRect = new Rectangle(r.x
>>> + (r.width - d.width) / 2, r.y
>>> + (r.height - d.height) / 2, d.width,
>>> d.height);
>>> child.setBounds(childRect);
>>> }
>>> }
>>> });
>>> }
>>>
>>> /**
>>> * @generated NOT
>>> */
>>> private void createContents() {
>>>
>>> fFigureSketchLabelFigure = new WrappingLabel();
>>>
>>> fFigureSketchLabelFigure.setAlignment(PositionConstants.CENT ER);
>>> fFigureSketchLabelFigure.setText("");
>>>
>>> fFigureSketchLabelFigure.setBackgroundColor(ColorConstants.w hite);
>>>
>>> this.add(fFigureSketchLabelFigure);
>>>
>>> }
>>>
>>> /**
>>> * @generated
>>> */
>>> public WrappingLabel getFigureSketchLabelFigure() {
>>> return fFigureSketchLabelFigure;
>>> }
>>>
>>> }
>>>
>>>
>>>
>>> On 25-01-2011 15:39, Martin Fluegge wrote:
>>>>> Hi all, I'm getting this on my Dawn/GMF editor. My editor is not
>>>>> refreshed, but when saved, the other editors are refreshed properly:
>>>>
>>>> With "not refreshed" you mean that the element you placed on your
>>>> diagram is not visible?
>>>>
>>>> Following the excpetion I would say that the getFigure() method from
>>>> your ShapeEditPart subclass seems the deleiver null. Did you customize
>>>> the cdo in the affected class?
>>>>
>>>> Could you provide more information about the node? Does it have labels
>>>> or any compartments?
>>>>
>>>> Cheers,
>>>>
>>>> Martin
>>>
>>
>


--------------030100060102030306030304
Content-Type: text/plain;
name="UnknownEditPart.java"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="UnknownEditPart.java"

LyoqCiAqIENvcHlyaWdodCAoYykgMjAxMCBVZ28gU2FuZ2lvcmdpIGFuZCBv dGhlcnMuCiAq
ICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBh Y2NvbXBhbnlp
bmcgbWF0ZXJpYWxzCiAqICBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhl IHRlcm1zIG9m
IHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogIHdoaWNoIGFj Y29tcGFuaWVz
IHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqICBo dHRwOi8vd3d3
LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAogKiAgCiAqICBDb250 cmlidXRvcnM6
CiAqICBVZ28gU2FuZ2lvcmdpIDx1Z28uc2FuZ2lvcmdpQGdtYWlsLmNvbT4g LSBJbml0aWFs
IGNvbnRyaWJ1dGlvbgogKiAgCiAqCiAqICRJZCQKICovIAogcGFja2FnZSBv cmcuZWNsaXBz
ZS5za2V0Y2guZXhhbXBsZXMuc2hhcGVzLmRpYWdyYW0uZWRpdC5wYXJ0czsK CmltcG9ydCBq
YXZhLmlvLkZpbGU7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBv cnQgamF2YS51
dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwoKaW1wb3J0 IG9yZy5lY2xp
cHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwppbXBvcnQgb3Jn LmVjbGlwc2Uu
Y29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwppbXBvcnQgb3JnLmVj bGlwc2UuY29y
ZS5ydW50aW1lLlBsYXRmb3JtOwppbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJk LkNvbG9yQ29u
c3RhbnRzOwppbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLklGaWd1cmU7Cmlt cG9ydCBvcmcu
ZWNsaXBzZS5kcmF3MmQuTGFiZWw7CmltcG9ydCBvcmcuZWNsaXBzZS5kcmF3 MmQuUG9zaXRp
b25Db25zdGFudHM7CmltcG9ydCBvcmcuZWNsaXBzZS5kcmF3MmQuU2hhcGU7 CmltcG9ydCBv
cmcuZWNsaXBzZS5kcmF3MmQuU3RhY2tMYXlvdXQ7CmltcG9ydCBvcmcuZWNs aXBzZS5kcmF3
MmQuZ2VvbWV0cnkuRGltZW5zaW9uOwppbXBvcnQgb3JnLmVjbGlwc2UuZHJh dzJkLmdlb21l
dHJ5LlJlY3RhbmdsZTsKaW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5FZGl0UGFy dDsKaW1wb3J0
IG9yZy5lY2xpcHNlLmdlZi5FZGl0UG9saWN5OwppbXBvcnQgb3JnLmVjbGlw c2UuZ2VmLlJl
cXVlc3Q7CmltcG9ydCBvcmcuZWNsaXBzZS5nZWYuY29tbWFuZHMuQ29tbWFu ZDsKaW1wb3J0
IG9yZy5lY2xpcHNlLmdlZi5lZGl0cG9saWNpZXMuTGF5b3V0RWRpdFBvbGlj eTsKaW1wb3J0
IG9yZy5lY2xpcHNlLmdlZi5lZGl0cG9saWNpZXMuTm9uUmVzaXphYmxlRWRp dFBvbGljeTsK
aW1wb3J0IG9yZy5lY2xpcHNlLmdlZi5yZXF1ZXN0cy5DcmVhdGVSZXF1ZXN0 OwppbXBvcnQg
b3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZGlhZ3JhbS51aS5lZGl0cGFydHMu SUdyYXBoaWNh
bEVkaXRQYXJ0OwppbXBvcnQgb3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZGlh Z3JhbS51aS5l
ZGl0cGFydHMuU2hhcGVOb2RlRWRpdFBhcnQ7CmltcG9ydCBvcmcuZWNsaXBz ZS5nbWYucnVu
dGltZS5kaWFncmFtLnVpLmVkaXRwb2xpY2llcy5FZGl0UG9saWN5Um9sZXM7 CmltcG9ydCBv
cmcuZWNsaXBzZS5nbWYucnVudGltZS5kaWFncmFtLnVpLmVkaXRwb2xpY2ll cy5SZXNpemFi
bGVTaGFwZUxhYmVsRWRpdFBvbGljeTsKaW1wb3J0IG9yZy5lY2xpcHNlLmdt Zi5ydW50aW1l
LmRyYXcyZC51aS5maWd1cmVzLkNvbnN0cmFpbmVkVG9vbGJhckxheW91dDsK aW1wb3J0IG9y
Zy5lY2xpcHNlLmdtZi5ydW50aW1lLmRyYXcyZC51aS5maWd1cmVzLldyYXBw aW5nTGFiZWw7
CmltcG9ydCBvcmcuZWNsaXBzZS5nbWYucnVudGltZS5kcmF3MmQudWkucmVu ZGVyLlJlbmRl
cmVkSW1hZ2U7CmltcG9ydCBvcmcuZWNsaXBzZS5nbWYucnVudGltZS5kcmF3 MmQudWkucmVu
ZGVyLmZhY3RvcnkuUmVuZGVyZWRJbWFnZUZhY3Rvcnk7CmltcG9ydCBvcmcu ZWNsaXBzZS5n
bWYucnVudGltZS5kcmF3MmQudWkucmVuZGVyLmZpZ3VyZXMuU2NhbGFibGVJ bWFnZUZpZ3Vy
ZTsKaW1wb3J0IG9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLmVtZi50eXBlLmNv cmUuSUVsZW1l
bnRUeXBlOwppbXBvcnQgb3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZ2VmLnVp LmZpZ3VyZXMu
RGVmYXVsdFNpemVOb2RlRmlndXJlOwppbXBvcnQgb3JnLmVjbGlwc2UuZ21m LnJ1bnRpbWUu
Z2VmLnVpLmZpZ3VyZXMuTm9kZUZpZ3VyZTsKaW1wb3J0IG9yZy5lY2xpcHNl LmdtZi5ydW50
aW1lLm5vdGF0aW9uLlZpZXc7CmltcG9ydCBvcmcuZWNsaXBzZS5nbWYucnVu dGltZS5ub3Rh
dGlvbi5pbXBsLk5vZGVJbXBsOwppbXBvcnQgb3JnLmVjbGlwc2UuZ21mLnJ1 bnRpbWUubm90
YXRpb24uaW1wbC5TaGFwZUltcGw7CmltcG9ydCBvcmcuZWNsaXBzZS5za2V0 Y2guZXhhbXBs
ZXMuc2hhcGVzLlVua25vd247CmltcG9ydCBvcmcuZWNsaXBzZS5za2V0Y2gu ZXhhbXBsZXMu
c2hhcGVzLmRpYWdyYW0uZWRpdC5wb2xpY2llcy5Vbmtub3duSXRlbVNlbWFu dGljRWRpdFBv
bGljeTsKaW1wb3J0IG9yZy5lY2xpcHNlLnNrZXRjaC5leGFtcGxlcy5zaGFw ZXMuZGlhZ3Jh
bS5wYXJ0LlNoYXBlc1Zpc3VhbElEUmVnaXN0cnk7CmltcG9ydCBvcmcuZWNs aXBzZS5za2V0
Y2guZXhhbXBsZXMuc2hhcGVzLmRpYWdyYW0ucHJvdmlkZXJzLlNoYXBlc0Vs ZW1lbnRUeXBl
czsKaW1wb3J0IG9yZy5lY2xpcHNlLnNrZXRjaC5leGFtcGxlcy5zaGFwZXMu ZGlhZ3JhbS51
dGlsLkJhc2U2NDsKaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5D b2xvcjsKaW1w
b3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7CmltcG9ydCBvcmcu b3NnaS5mcmFt
ZXdvcmsuQnVuZGxlOwoKLyoqCiAqIEBnZW5lcmF0ZWQKICovCnB1YmxpYyBj bGFzcyBVbmtu
b3duRWRpdFBhcnQgZXh0ZW5kcyBTaGFwZU5vZGVFZGl0UGFydCB7CgoJLyoq CgkgKiBAZ2Vu
ZXJhdGVkCgkgKi8KCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFZJU1VBTF9J RCA9IDIwMDM7
CgoJLyoqCgkgKiBAZ2VuZXJhdGVkCgkgKi8KCXByb3RlY3RlZCBJRmlndXJl IGNvbnRlbnRQ
YW5lOwoKCS8qKgoJICogQGdlbmVyYXRlZAoJICovCglwcm90ZWN0ZWQgSUZp Z3VyZSBwcmlt
YXJ5U2hhcGU7CgoJLyoqCgkgKiBAZ2VuZXJhdGVkCgkgKi8KCXB1YmxpYyBV bmtub3duRWRp
dFBhcnQoVmlldyB2aWV3KSB7CgkJc3VwZXIodmlldyk7Cgl9CgoJLyoqCgkg KiBAZ2VuZXJh
dGVkIE5PVAoJICovCglwcm90ZWN0ZWQgdm9pZCBjcmVhdGVEZWZhdWx0RWRp dFBvbGljaWVz
KCkgewoJCXN1cGVyLmNyZWF0ZURlZmF1bHRFZGl0UG9saWNpZXMoKTsKCQlp bnN0YWxsRWRp
dFBvbGljeShFZGl0UG9saWN5Um9sZXMuU0VNQU5USUNfUk9MRSwKCQkJCW5l dyBVbmtub3du
SXRlbVNlbWFudGljRWRpdFBvbGljeSgpKTsKCQlpbnN0YWxsRWRpdFBvbGlj eShFZGl0UG9s
aWN5LkxBWU9VVF9ST0xFLCBjcmVhdGVMYXlvdXRFZGl0UG9saWN5KCkpOwoJ CS8vIFhYWCBu
ZWVkIGFuIFNDUiB0byBydW50aW1lIHRvIGhhdmUgYW5vdGhlciBhYnN0cmFj dCBzdXBlcmNs
YXNzIHRoYXQgd291bGQgbGV0IGNoaWxkcmVuIGFkZCByZWFzb25hYmxlIGVk aXRwb2xpY2ll
cwoJCXJlbW92ZUVkaXRQb2xpY3kob3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUu ZGlhZ3JhbS51
aS5lZGl0cG9saWNpZXMuRWRpdFBvbGljeVJvbGVzLkNPTk5FQ1RJT05fSEFO RExFU19ST0xF
KTsKCQlpbnN0YWxsRWRpdFBvbGljeShFZGl0UG9saWN5LlBSSU1BUllfRFJB R19ST0xFLAoJ
CQkJbmV3IFJlc2l6YWJsZVNoYXBlTGFiZWxFZGl0UG9saWN5KCkpOwoJfQoK CS8qKgoJICog
QGdlbmVyYXRlZAoJICovCglwcm90ZWN0ZWQgTGF5b3V0RWRpdFBvbGljeSBj cmVhdGVMYXlv
dXRFZGl0UG9saWN5KCkgewoJCUxheW91dEVkaXRQb2xpY3kgbGVwID0gbmV3 IExheW91dEVk
aXRQb2xpY3koKSB7CgoJCQlwcm90ZWN0ZWQgRWRpdFBvbGljeSBjcmVhdGVD aGlsZEVkaXRQ
b2xpY3koRWRpdFBhcnQgY2hpbGQpIHsKCQkJCUVkaXRQb2xpY3kgcmVzdWx0 ID0gY2hpbGQK
CQkJCQkJLmdldEVkaXRQb2xpY3koRWRpdFBvbGljeS5QUklNQVJZX0RSQUdf Uk9MRSk7CgkJ
CQlpZiAocmVzdWx0ID09IG51bGwpIHsKCQkJCQlyZXN1bHQgPSBuZXcgTm9u UmVzaXphYmxl
RWRpdFBvbGljeSgpOwoJCQkJfQoJCQkJcmV0dXJuIHJlc3VsdDsKCQkJfQoK CQkJcHJvdGVj
dGVkIENvbW1hbmQgZ2V0TW92ZUNoaWxkcmVuQ29tbWFuZChSZXF1ZXN0IHJl cXVlc3QpIHsK
CQkJCXJldHVybiBudWxsOwoJCQl9CgoJCQlwcm90ZWN0ZWQgQ29tbWFuZCBn ZXRDcmVhdGVD
b21tYW5kKENyZWF0ZVJlcXVlc3QgcmVxdWVzdCkgewoJCQkJcmV0dXJuIG51 bGw7CgkJCX0K
CQl9OwoJCXJldHVybiBsZXA7Cgl9CgoJLyoqCgkgKiBAZ2VuZXJhdGVkIE5P VAoJICovCglw
cm90ZWN0ZWQgSUZpZ3VyZSBjcmVhdGVOb2RlU2hhcGUoKSB7CgoJCUJ1bmRs ZSBidW5kbGUg
PSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLnNrZXRjaC5leGFt cGxlcy5zaGFw
ZXMiKTsKCQl0cnkgewoKCQkJTm9kZUltcGwgbiA9IChOb2RlSW1wbCkgZ2V0 TW9kZWwoKTsK
CQkJVW5rbm93biBzID0gKFVua25vd24pIG4uYmFzaWNHZXRFbGVtZW50KCk7 CgoJCQlpZiAo
cyE9bnVsbCYmcy5nZXRTdmcoKSAhPSBudWxsKSB7CgoJCQkJSVdvcmtzcGFj ZVJvb3QgbXlX
b3Jrc3BhY2VSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgp CgkJCQkJCS5n
ZXRSb290KCk7CgkJCQlGaWxlIGltZ2ZpbGUgPSBteVdvcmtzcGFjZVJvb3Qu Z2V0TG9jYXRp
b24oKS5hcHBlbmQoCgkJCQkJCSJzIiArIFN5c3RlbS5jdXJyZW50VGltZU1p bGxpcygpICsg
Ii5zdmciKS50b0ZpbGUoKTsKCgkJCQlCYXNlNjQuZGVjb2RlVG9GaWxlKHMu Z2V0U3ZnKCks
IGltZ2ZpbGUuZ2V0UGF0aCgpKTsKCgkJCQlSZW5kZXJlZEltYWdlIGltZyA9 IFJlbmRlcmVk
SW1hZ2VGYWN0b3J5LmdldEluc3RhbmNlKGltZ2ZpbGUKCQkJCQkJLmdldFBh dGgoKSk7CgkJ
CQlpbWcuZ2V0UmVuZGVySW5mbygpLnNldFZhbHVlcygwLCAwLCB0cnVlLCB0 cnVlLAoJCQkJ
CQluZXcgUkdCKDI1NSwgMCwgMCksIG5ldyBSR0IoMjU1LCAwLCAwKSk7CgoJ CQkJcHJpbWFy
eVNoYXBlID0gbmV3IFNWR1NrZXRjaEZpZ3VyZShpbWcpOwoKCQkJfSBlbHNl IHsKCQkJCXBy
aW1hcnlTaGFwZSA9IG5ldyBTVkdTa2V0Y2hGaWd1cmUoUmVuZGVyZWRJbWFn ZUZhY3RvcnkK
CQkJCQkJLmdldEluc3RhbmNlKGJ1bmRsZS5nZXRFbnRyeSgiL2ljb25zL3Nx dWFyZS5zdmci
KSkpOwoJCQl9CgoJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKCgkJCWUu cHJpbnRTdGFj
a1RyYWNlKCk7CgkJCS8vcHJpbWFyeVNoYXBlID0gbmV3IFNrZXRjaEZpZ3Vy ZShSZW5kZXJl
ZEltYWdlRmFjdG9yeQoJCQkvLwkJLmdldEluc3RhbmNlKGJ1bmRsZS5nZXRF bnRyeSgiL2lj
b25zL2ltZ21pc3MuZ2lmIikpKTsKCQl9CgoJCXJldHVybiBwcmltYXJ5U2hh cGU7CgoJfQoK
CS8qKgoJICogQGdlbmVyYXRlZAoJICovCglwdWJsaWMgU1ZHU2tldGNoRmln dXJlIGdldFBy
aW1hcnlTaGFwZSgpIHsKCQlyZXR1cm4gKFNWR1NrZXRjaEZpZ3VyZSkgcHJp bWFyeVNoYXBl
OwoJfQoKCS8qKgoJICogQGdlbmVyYXRlZAoJICovCglwcm90ZWN0ZWQgYm9v bGVhbiBhZGRG
aXhlZENoaWxkKEVkaXRQYXJ0IGNoaWxkRWRpdFBhcnQpIHsKCQlpZiAoY2hp bGRFZGl0UGFy
dCBpbnN0YW5jZW9mIFVua25vd25MYWJlbEVkaXRQYXJ0KSB7CgkJCSgoVW5r bm93bkxhYmVs
RWRpdFBhcnQpIGNoaWxkRWRpdFBhcnQpLnNldExhYmVsKGdldFByaW1hcnlT aGFwZSgpCgkJ
CQkJLmdldEZpZ3VyZVNrZXRjaExhYmVsRmlndXJlKCkpOwoJCQlyZXR1cm4g dHJ1ZTsKCQl9
CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogQGdlbmVyYXRlZAoJICov Cglwcm90ZWN0
ZWQgYm9vbGVhbiByZW1vdmVGaXhlZENoaWxkKEVkaXRQYXJ0IGNoaWxkRWRp dFBhcnQpIHsK
CQlpZiAoY2hpbGRFZGl0UGFydCBpbnN0YW5jZW9mIFVua25vd25MYWJlbEVk aXRQYXJ0KSB7
CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoq CgkgKiBAZ2Vu
ZXJhdGVkCgkgKi8KCXByb3RlY3RlZCB2b2lkIGFkZENoaWxkVmlzdWFsKEVk aXRQYXJ0IGNo
aWxkRWRpdFBhcnQsIGludCBpbmRleCkgewoJCWlmIChhZGRGaXhlZENoaWxk KGNoaWxkRWRp
dFBhcnQpKSB7CgkJCXJldHVybjsKCQl9CgkJc3VwZXIuYWRkQ2hpbGRWaXN1 YWwoY2hpbGRF
ZGl0UGFydCwgLTEpOwoJfQoKCS8qKgoJICogQGdlbmVyYXRlZAoJICovCglw cm90ZWN0ZWQg
dm9pZCByZW1vdmVDaGlsZFZpc3VhbChFZGl0UGFydCBjaGlsZEVkaXRQYXJ0 KSB7CgkJaWYg
KHJlbW92ZUZpeGVkQ2hpbGQoY2hpbGRFZGl0UGFydCkpIHsKCQkJcmV0dXJu OwoJCX0KCQlz
dXBlci5yZW1vdmVDaGlsZFZpc3VhbChjaGlsZEVkaXRQYXJ0KTsKCX0KCgkv KioKCSAqIEBn
ZW5lcmF0ZWQKCSAqLwoJcHJvdGVjdGVkIElGaWd1cmUgZ2V0Q29udGVudFBh bmVGb3IoSUdy
YXBoaWNhbEVkaXRQYXJ0IGVkaXRQYXJ0KSB7CgkJcmV0dXJuIGdldENvbnRl bnRQYW5lKCk7
Cgl9CgoJLyoqCgkgKiBAZ2VuZXJhdGVkCgkgKi8KCXByb3RlY3RlZCBOb2Rl RmlndXJlIGNy
ZWF0ZU5vZGVQbGF0ZSgpIHsKCQlEZWZhdWx0U2l6ZU5vZGVGaWd1cmUgcmVz dWx0ID0gbmV3
IERlZmF1bHRTaXplTm9kZUZpZ3VyZSg0MCwgNDApOwoJCXJldHVybiByZXN1 bHQ7Cgl9CgoJ
LyoqCgkgKiBDcmVhdGVzIGZpZ3VyZSBmb3IgdGhpcyBlZGl0IHBhcnQuCgkg KiAKCSAqIEJv
ZHkgb2YgdGhpcyBtZXRob2QgZG9lcyBub3QgZGVwZW5kIG9uIHNldHRpbmdz IGluIGdlbmVy
YXRpb24gbW9kZWwKCSAqIHNvIHlvdSBtYXkgc2FmZWx5IHJlbW92ZSA8aT5n ZW5lcmF0ZWQ8
L2k+IHRhZyBhbmQgbW9kaWZ5IGl0LgoJICogCgkgKiBAZ2VuZXJhdGVkCgkg Ki8KCXByb3Rl
Y3RlZCBOb2RlRmlndXJlIGNyZWF0ZU5vZGVGaWd1cmUoKSB7CgkJTm9kZUZp Z3VyZSBmaWd1
cmUgPSBjcmVhdGVOb2RlUGxhdGUoKTsKCQlmaWd1cmUuc2V0TGF5b3V0TWFu YWdlcihuZXcg
U3RhY2tMYXlvdXQoKSk7CgkJSUZpZ3VyZSBzaGFwZSA9IGNyZWF0ZU5vZGVT aGFwZSgpOwoJ
CWZpZ3VyZS5hZGQoc2hhcGUpOwoJCWNvbnRlbnRQYW5lID0gc2V0dXBDb250 ZW50UGFuZShz
aGFwZSk7CgkJcmV0dXJuIGZpZ3VyZTsKCX0KCgkvKioKCSAqIERlZmF1bHQg aW1wbGVtZW50
YXRpb24gdHJlYXRzIHBhc3NlZCBmaWd1cmUgYXMgY29udGVudCBwYW5lLgoJ ICogUmVzcGVj
dHMgbGF5b3V0IG9uZSBtYXkgaGF2ZSBzZXQgZm9yIGdlbmVyYXRlZCBmaWd1 cmUuCgkgKiBA
cGFyYW0gbm9kZVNoYXBlIGluc3RhbmNlIG9mIGdlbmVyYXRlZCBmaWd1cmUg Y2xhc3MKCSAq
IEBnZW5lcmF0ZWQKCSAqLwoJcHJvdGVjdGVkIElGaWd1cmUgc2V0dXBDb250 ZW50UGFuZShJ
RmlndXJlIG5vZGVTaGFwZSkgewoJCWlmIChub2RlU2hhcGUuZ2V0TGF5b3V0 TWFuYWdlcigp
ID09IG51bGwpIHsKCQkJQ29uc3RyYWluZWRUb29sYmFyTGF5b3V0IGxheW91 dCA9IG5ldyBD
b25zdHJhaW5lZFRvb2xiYXJMYXlvdXQoKTsKCQkJbGF5b3V0LnNldFNwYWNp bmcoNSk7CgkJ
CW5vZGVTaGFwZS5zZXRMYXlvdXRNYW5hZ2VyKGxheW91dCk7CgkJfQoJCXJl dHVybiBub2Rl
U2hhcGU7IC8vIHVzZSBub2RlU2hhcGUgaXRzZWxmIGFzIGNvbnRlbnRQYW5l Cgl9CgoJLyoq
CgkgKiBAZ2VuZXJhdGVkCgkgKi8KCXB1YmxpYyBJRmlndXJlIGdldENvbnRl bnRQYW5lKCkg
ewoJCWlmIChjb250ZW50UGFuZSAhPSBudWxsKSB7CgkJCXJldHVybiBjb250 ZW50UGFuZTsK
CQl9CgkJcmV0dXJuIHN1cGVyLmdldENvbnRlbnRQYW5lKCk7Cgl9CgoJLyoq CgkgKiBAZ2Vu
ZXJhdGVkCgkgKi8KCXByb3RlY3RlZCB2b2lkIHNldEZvcmVncm91bmRDb2xv cihDb2xvciBj
b2xvcikgewoJCWlmIChwcmltYXJ5U2hhcGUgIT0gbnVsbCkgewoJCQlwcmlt YXJ5U2hhcGUu
c2V0Rm9yZWdyb3VuZENvbG9yKGNvbG9yKTsKCQl9Cgl9CgoJLyoqCgkgKiBA Z2VuZXJhdGVk
CgkgKi8KCXByb3RlY3RlZCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihDb2xv ciBjb2xvcikg
ewoJCWlmIChwcmltYXJ5U2hhcGUgIT0gbnVsbCkgewoJCQlwcmltYXJ5U2hh cGUuc2V0QmFj
a2dyb3VuZENvbG9yKGNvbG9yKTsKCQl9Cgl9CgoJLyoqCgkgKiBAZ2VuZXJh dGVkCgkgKi8K
CXByb3RlY3RlZCB2b2lkIHNldExpbmVXaWR0aChpbnQgd2lkdGgpIHsKCQlp ZiAocHJpbWFy
eVNoYXBlIGluc3RhbmNlb2YgU2hhcGUpIHsKCQkJKChTaGFwZSkgcHJpbWFy eVNoYXBlKS5z
ZXRMaW5lV2lkdGgod2lkdGgpOwoJCX0KCX0KCgkvKioKCSAqIEBnZW5lcmF0 ZWQKCSAqLwoJ
cHJvdGVjdGVkIHZvaWQgc2V0TGluZVR5cGUoaW50IHN0eWxlKSB7CgkJaWYg KHByaW1hcnlT
aGFwZSBpbnN0YW5jZW9mIFNoYXBlKSB7CgkJCSgoU2hhcGUpIHByaW1hcnlT aGFwZSkuc2V0
TGluZVN0eWxlKHN0eWxlKTsKCQl9Cgl9CgoJLyoqCgkgKiBAZ2VuZXJhdGVk CgkgKi8KCXB1
YmxpYyBFZGl0UGFydCBnZXRQcmltYXJ5Q2hpbGRFZGl0UGFydCgpIHsKCQly ZXR1cm4gZ2V0
Q2hpbGRCeVNlbWFudGljSGludChTaGFwZXNWaXN1YWxJRFJlZ2lzdHJ5CgkJ CQkuZ2V0VHlw
ZShVbmtub3duTGFiZWxFZGl0UGFydC5WSVNVQUxfSUQpKTsKCX0KCgkvKioK CSAqIEBnZW5l
cmF0ZWQKCSAqLwoJcHVibGljIExpc3QvKjxvcmcuZWNsaXBzZS5nbWYucnVu dGltZS5lbWYu
dHlwZS5jb3JlLklFbGVtZW50VHlwZT4qL2dldE1BUmVsVHlwZXNPblNvdXJj ZSgpIHsKCQlM
aXN0Lyo8b3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZW1mLnR5cGUuY29yZS5J RWxlbWVudFR5
cGU+Ki90eXBlcyA9IG5ldyBBcnJheUxpc3QvKjxvcmcuZWNsaXBzZS5nbWYu cnVudGltZS5l
bWYudHlwZS5jb3JlLklFbGVtZW50VHlwZT4qLygpOwoJCXR5cGVzLmFkZChT aGFwZXNFbGVt
ZW50VHlwZXMuQ29ubmVjdGlvbl80MDAxKTsKCQl0eXBlcy5hZGQoU2hhcGVz RWxlbWVudFR5
cGVzLkRhc2hlZENvbm5lY3Rpb25fNDAwMik7CgkJcmV0dXJuIHR5cGVzOwoJ fQoKCS8qKgoJ
ICogQGdlbmVyYXRlZAoJICovCglwdWJsaWMgTGlzdC8qPG9yZy5lY2xpcHNl LmdtZi5ydW50
aW1lLmVtZi50eXBlLmNvcmUuSUVsZW1lbnRUeXBlPiovZ2V0TUFSZWxUeXBl c09uU291cmNl
QW5kVGFyZ2V0KAoJCQlJR3JhcGhpY2FsRWRpdFBhcnQgdGFyZ2V0RWRpdFBh cnQpIHsKCQlM
aXN0Lyo8b3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZW1mLnR5cGUuY29yZS5J RWxlbWVudFR5
cGU+Ki90eXBlcyA9IG5ldyBBcnJheUxpc3QvKjxvcmcuZWNsaXBzZS5nbWYu cnVudGltZS5l
bWYudHlwZS5jb3JlLklFbGVtZW50VHlwZT4qLygpOwoJCWlmICh0YXJnZXRF ZGl0UGFydCBp
bnN0YW5jZW9mIFNxdWFyZUVkaXRQYXJ0KSB7CgkJCXR5cGVzLmFkZChTaGFw ZXNFbGVtZW50
VHlwZXMuQ29ubmVjdGlvbl80MDAxKTsKCQl9CgkJaWYgKHRhcmdldEVkaXRQ YXJ0IGluc3Rh
bmNlb2YgVHJpYW5nbGVFZGl0UGFydCkgewoJCQl0eXBlcy5hZGQoU2hhcGVz RWxlbWVudFR5
cGVzLkNvbm5lY3Rpb25fNDAwMSk7CgkJfQoJCWlmICh0YXJnZXRFZGl0UGFy dCBpbnN0YW5j
ZW9mIG9yZy5lY2xpcHNlLnNrZXRjaC5leGFtcGxlcy5zaGFwZXMuZGlhZ3Jh bS5lZGl0LnBh
cnRzLlVua25vd25FZGl0UGFydCkgewoJCQl0eXBlcy5hZGQoU2hhcGVzRWxl bWVudFR5cGVz
LkNvbm5lY3Rpb25fNDAwMSk7CgkJfQoJCWlmICh0YXJnZXRFZGl0UGFydCBp bnN0YW5jZW9m
IFNxdWFyZUVkaXRQYXJ0KSB7CgkJCXR5cGVzLmFkZChTaGFwZXNFbGVtZW50 VHlwZXMuRGFz
aGVkQ29ubmVjdGlvbl80MDAyKTsKCQl9CgkJaWYgKHRhcmdldEVkaXRQYXJ0 IGluc3RhbmNl
b2YgVHJpYW5nbGVFZGl0UGFydCkgewoJCQl0eXBlcy5hZGQoU2hhcGVzRWxl bWVudFR5cGVz
LkRhc2hlZENvbm5lY3Rpb25fNDAwMik7CgkJfQoJCWlmICh0YXJnZXRFZGl0 UGFydCBpbnN0
YW5jZW9mIG9yZy5lY2xpcHNlLnNrZXRjaC5leGFtcGxlcy5zaGFwZXMuZGlh Z3JhbS5lZGl0
LnBhcnRzLlVua25vd25FZGl0UGFydCkgewoJCQl0eXBlcy5hZGQoU2hhcGVz RWxlbWVudFR5
cGVzLkRhc2hlZENvbm5lY3Rpb25fNDAwMik7CgkJfQoJCXJldHVybiB0eXBl czsKCX0KCgkv
KioKCSAqIEBnZW5lcmF0ZWQKCSAqLwoJcHVibGljIExpc3QvKjxvcmcuZWNs aXBzZS5nbWYu
cnVudGltZS5lbWYudHlwZS5jb3JlLklFbGVtZW50VHlwZT4qL2dldE1BVHlw ZXNGb3JUYXJn
ZXQoCgkJCUlFbGVtZW50VHlwZSByZWxhdGlvbnNoaXBUeXBlKSB7CgkJTGlz dC8qPG9yZy5l
Y2xpcHNlLmdtZi5ydW50aW1lLmVtZi50eXBlLmNvcmUuSUVsZW1lbnRUeXBl PiovdHlwZXMg
PSBuZXcgQXJyYXlMaXN0Lyo8b3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuZW1m LnR5cGUuY29y
ZS5JRWxlbWVudFR5cGU+Ki8oKTsKCQlpZiAocmVsYXRpb25zaGlwVHlwZSA9 PSBTaGFwZXNF
bGVtZW50VHlwZXMuQ29ubmVjdGlvbl80MDAxKSB7CgkJCXR5cGVzLmFkZChT aGFwZXNFbGVt
ZW50VHlwZXMuU3F1YXJlXzIwMDEpOwoJCX0KCQlpZiAocmVsYXRpb25zaGlw VHlwZSA9PSBT
aGFwZXNFbGVtZW50VHlwZXMuQ29ubmVjdGlvbl80MDAxKSB7CgkJCXR5cGVz LmFkZChTaGFw
ZXNFbGVtZW50VHlwZXMuVHJpYW5nbGVfMjAwMik7CgkJfQoJCWlmIChyZWxh dGlvbnNoaXBU
eXBlID09IFNoYXBlc0VsZW1lbnRUeXBlcy5Db25uZWN0aW9uXzQwMDEpIHsK CQkJdHlwZXMu
YWRkKFNoYXBlc0VsZW1lbnRUeXBlcy5Vbmtub3duXzIwMDMpOwoJCX0KCQlp ZiAocmVsYXRp
b25zaGlwVHlwZSA9PSBTaGFwZXNFbGVtZW50VHlwZXMuRGFzaGVkQ29ubmVj dGlvbl80MDAy
KSB7CgkJCXR5cGVzLmFkZChTaGFwZXNFbGVtZW50VHlwZXMuU3F1YXJlXzIw MDEpOwoJCX0K
CQlpZiAocmVsYXRpb25zaGlwVHlwZSA9PSBTaGFwZXNFbGVtZW50VHlwZXMu RGFzaGVkQ29u
bmVjdGlvbl80MDAyKSB7CgkJCXR5cGVzLmFkZChTaGFwZXNFbGVtZW50VHlw ZXMuVHJpYW5n
bGVfMjAwMik7CgkJfQoJCWlmIChyZWxhdGlvbnNoaXBUeXBlID09IFNoYXBl c0VsZW1lbnRU
eXBlcy5EYXNoZWRDb25uZWN0aW9uXzQwMDIpIHsKCQkJdHlwZXMuYWRkKFNo YXBlc0VsZW1l
bnRUeXBlcy5Vbmtub3duXzIwMDMpOwoJCX0KCQlyZXR1cm4gdHlwZXM7Cgl9 CgoJLyoqCgkg
KiBAZ2VuZXJhdGVkCgkgKi8KCXB1YmxpYyBMaXN0Lyo8b3JnLmVjbGlwc2Uu Z21mLnJ1bnRp
bWUuZW1mLnR5cGUuY29yZS5JRWxlbWVudFR5cGU+Ki9nZXRNQVJlbFR5cGVz T25UYXJnZXQo
KSB7CgkJTGlzdC8qPG9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLmVtZi50eXBl LmNvcmUuSUVs
ZW1lbnRUeXBlPiovdHlwZXMgPSBuZXcgQXJyYXlMaXN0Lyo8b3JnLmVjbGlw c2UuZ21mLnJ1
bnRpbWUuZW1mLnR5cGUuY29yZS5JRWxlbWVudFR5cGU+Ki8oKTsKCQl0eXBl cy5hZGQoU2hh
cGVzRWxlbWVudFR5cGVzLkNvbm5lY3Rpb25fNDAwMSk7CgkJdHlwZXMuYWRk KFNoYXBlc0Vs
ZW1lbnRUeXBlcy5EYXNoZWRDb25uZWN0aW9uXzQwMDIpOwoJCXJldHVybiB0 eXBlczsKCX0K
CgkvKioKCSAqIEBnZW5lcmF0ZWQKCSAqLwoJcHVibGljIExpc3QvKjxvcmcu ZWNsaXBzZS5n
bWYucnVudGltZS5lbWYudHlwZS5jb3JlLklFbGVtZW50VHlwZT4qL2dldE1B VHlwZXNGb3JT
b3VyY2UoCgkJCUlFbGVtZW50VHlwZSByZWxhdGlvbnNoaXBUeXBlKSB7CgkJ TGlzdC8qPG9y
Zy5lY2xpcHNlLmdtZi5ydW50aW1lLmVtZi50eXBlLmNvcmUuSUVsZW1lbnRU eXBlPiovdHlw
ZXMgPSBuZXcgQXJyYXlMaXN0Lyo8b3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUu ZW1mLnR5cGUu
Y29yZS5JRWxlbWVudFR5cGU+Ki8oKTsKCQlpZiAocmVsYXRpb25zaGlwVHlw ZSA9PSBTaGFw
ZXNFbGVtZW50VHlwZXMuQ29ubmVjdGlvbl80MDAxKSB7CgkJCXR5cGVzLmFk ZChTaGFwZXNF
bGVtZW50VHlwZXMuU3F1YXJlXzIwMDEpOwoJCX0KCQlpZiAocmVsYXRpb25z aGlwVHlwZSA9
PSBTaGFwZXNFbGVtZW50VHlwZXMuQ29ubmVjdGlvbl80MDAxKSB7CgkJCXR5 cGVzLmFkZChT
aGFwZXNFbGVtZW50VHlwZXMuVHJpYW5nbGVfMjAwMik7CgkJfQoJCWlmIChy ZWxhdGlvbnNo
aXBUeXBlID09IFNoYXBlc0VsZW1lbnRUeXBlcy5Db25uZWN0aW9uXzQwMDEp IHsKCQkJdHlw
ZXMuYWRkKFNoYXBlc0VsZW1lbnRUeXBlcy5Vbmtub3duXzIwMDMpOwoJCX0K CQlpZiAocmVs
YXRpb25zaGlwVHlwZSA9PSBTaGFwZXNFbGVtZW50VHlwZXMuRGFzaGVkQ29u bmVjdGlvbl80
MDAyKSB7CgkJCXR5cGVzLmFkZChTaGFwZXNFbGVtZW50VHlwZXMuU3F1YXJl XzIwMDEpOwoJ
CX0KCQlpZiAocmVsYXRpb25zaGlwVHlwZSA9PSBTaGFwZXNFbGVtZW50VHlw ZXMuRGFzaGVk
Q29ubmVjdGlvbl80MDAyKSB7CgkJCXR5cGVzLmFkZChTaGFwZXNFbGVtZW50 VHlwZXMuVHJp
YW5nbGVfMjAwMik7CgkJfQoJCWlmIChyZWxhdGlvbnNoaXBUeXBlID09IFNo YXBlc0VsZW1l
bnRUeXBlcy5EYXNoZWRDb25uZWN0aW9uXzQwMDIpIHsKCQkJdHlwZXMuYWRk KFNoYXBlc0Vs
ZW1lbnRUeXBlcy5Vbmtub3duXzIwMDMpOwoJCX0KCQlyZXR1cm4gdHlwZXM7 Cgl9CgoJLyoq
CgkgKiBAZ2VuZXJhdGVkCgkgKi8KCXB1YmxpYyBjbGFzcyBTVkdTa2V0Y2hG aWd1cmUgZXh0
ZW5kcyBTY2FsYWJsZUltYWdlRmlndXJlIHsKCgkJLyoqCgkJICogQGdlbmVy YXRlZAoJCSAq
LwoJCXByaXZhdGUgV3JhcHBpbmdMYWJlbCBmRmlndXJlU2tldGNoTGFiZWxG aWd1cmU7CgoJ
CS8qKgoJCSAqIEBnZW5lcmF0ZWQgTk9UCgkJICovCgkJcHJpdmF0ZSBSZW5k ZXJlZEltYWdl
IGltYWdlOwoKCQkvKioKCQkgKiBAZ2VuZXJhdGVkIE5PVAoJCSAqLwoJCXB1 YmxpYyBTVkdT
a2V0Y2hGaWd1cmUoKSB7CgkJCXN1cGVyKG51bGwsIHRydWUsIHRydWUsIHRy dWUpOwoJCQlj
cmVhdGVDb250ZW50cygpOwoJCX0KCgkJLyoqCgkJICogQGdlbmVyYXRlZCBO T1QKCQkgKi8K
CQlwdWJsaWMgU1ZHU2tldGNoRmlndXJlKFJlbmRlcmVkSW1hZ2UgaSkgewoJ CQlzdXBlcihp
LCB0cnVlLCB0cnVlLCB0cnVlKTsKCgkJCVVua25vd24gbW9kZWwgPSAoVW5r bm93bikgKChT
aGFwZUltcGwpIGdldE1vZGVsKCkpCgkJCQkJLmJhc2ljR2V0RWxlbWVudCgp OwoJCQlpZiht
b2RlbCAhPW51bGwpCgkJCXsKCQkJc2V0VG9vbFRpcChuZXcgTGFiZWwobW9k ZWwuZ2V0RWxl
bWVudCgpKSk7CgkJCX0KCQkJdGhpcy5pbWFnZSA9IGk7CgoJCQl0aGlzLnNl dE1haW50YWlu
QXNwZWN0UmF0aW8odHJ1ZSk7CgoJCQl0aGlzLnNldFJlbmRlcmVkSW1hZ2Uo aW1hZ2UpOwoK
CQkJY3JlYXRlQ29udGVudHMoKTsKCgkJCS8vY2VudGVyIHRoZSBjaGlsZHJl bgoJCQl0aGlz
LnNldExheW91dE1hbmFnZXIobmV3IFN0YWNrTGF5b3V0KCkgewoJCQkJcHVi bGljIHZvaWQg
bGF5b3V0KElGaWd1cmUgZmlndXJlKSB7CgkJCQkJUmVjdGFuZ2xlIHIgPSBm aWd1cmUuZ2V0
Q2xpZW50QXJlYSgpOwoJCQkJCUxpc3QgY2hpbGRyZW4gPSBmaWd1cmUuZ2V0 Q2hpbGRyZW4o
KTsKCQkJCQlJRmlndXJlIGNoaWxkOwoJCQkJCURpbWVuc2lvbiBkOwoJCQkJ CWZvciAoaW50
IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyBpKyspIHsKCQkJCQkJY2hp bGQgPSAoSUZp
Z3VyZSkgY2hpbGRyZW4uZ2V0KGkpOwoJCQkJCQlkID0gY2hpbGQuZ2V0UHJl ZmVycmVkU2l6
ZShyLndpZHRoLCByLmhlaWdodCk7CgkJCQkJCWQud2lkdGggPSBNYXRoLm1p bihkLndpZHRo
LCByLndpZHRoKTsKCQkJCQkJZC5oZWlnaHQgPSBNYXRoLm1pbihkLmhlaWdo dCwgci5oZWln
aHQpOwoJCQkJCQlSZWN0YW5nbGUgY2hpbGRSZWN0ID0gbmV3IFJlY3Rhbmds ZShyLngKCQkJ
CQkJCQkrIChyLndpZHRoIC0gZC53aWR0aCkgLyAyLCByLnkKCQkJCQkJCQkr IChyLmhlaWdo
dCAtIGQuaGVpZ2h0KSAvIDIsIGQud2lkdGgsIGQuaGVpZ2h0KTsKCQkJCQkJ Y2hpbGQuc2V0
Qm91bmRzKGNoaWxkUmVjdCk7CgkJCQkJfQoJCQkJfQoJCQl9KTsKCQl9CgoJ CS8qKgoJCSAq
IEBnZW5lcmF0ZWQgTk9UCgkJICovCgkJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNv bnRlbnRzKCkg
ewoKCQkJZkZpZ3VyZVNrZXRjaExhYmVsRmlndXJlID0gbmV3IFdyYXBwaW5n TGFiZWwoKTsK
CQkJZkZpZ3VyZVNrZXRjaExhYmVsRmlndXJlLnNldEFsaWdubWVudChQb3Np dGlvbkNvbnN0
YW50cy5DRU5URVIpOwoJCQlmRmlndXJlU2tldGNoTGFiZWxGaWd1cmUuc2V0 VGV4dCgiIik7
CgkJCWZGaWd1cmVTa2V0Y2hMYWJlbEZpZ3VyZS5zZXRCYWNrZ3JvdW5kQ29s b3IoQ29sb3JD
b25zdGFudHMud2hpdGUpOwoKCQkJdGhpcy5hZGQoZkZpZ3VyZVNrZXRjaExh YmVsRmlndXJl
KTsKCgkJfQoKCQkvKioKCQkgKiBAZ2VuZXJhdGVkCgkJICovCgkJcHJpdmF0 ZSBib29sZWFu
IG15VXNlTG9jYWxDb29yZGluYXRlcyA9IGZhbHNlOwoKCQkvKioKCQkgKiBA Z2VuZXJhdGVk
CgkJICovCgkJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTG9jYWxDb29yZGluYXRl cygpIHsKCQkJ
cmV0dXJuIG15VXNlTG9jYWxDb29yZGluYXRlczsKCQl9CgoJCS8qKgoJCSAq IEBnZW5lcmF0
ZWQKCQkgKi8KCQlwcm90ZWN0ZWQgdm9pZCBzZXRVc2VMb2NhbENvb3JkaW5h dGVzKGJvb2xl
YW4gdXNlTG9jYWxDb29yZGluYXRlcykgewoJCQlteVVzZUxvY2FsQ29vcmRp bmF0ZXMgPSB1
c2VMb2NhbENvb3JkaW5hdGVzOwoJCX0KCgkJLyoqCgkJICogQGdlbmVyYXRl ZAoJCSAqLwoJ
CXB1YmxpYyBXcmFwcGluZ0xhYmVsIGdldEZpZ3VyZVNrZXRjaExhYmVsRmln dXJlKCkgewoJ
CQlyZXR1cm4gZkZpZ3VyZVNrZXRjaExhYmVsRmlndXJlOwoJCX0KCgl9Cgp9 Cg==
--------------030100060102030306030304--
Re: [CDO] NPEx when setLayoutConstraint on GMF editors [message #652070 is a reply to message #651092] Wed, 02 February 2011 14:48 Go to previous message
Ugo Sangiorgi is currently offline Ugo SangiorgiFriend
Messages: 59
Registered: January 2010
Member
Hi Martin,
Sorry for the late response,

Yes the editpart is created, but the SVG figure (the one based the EMF property) doesnt.
All I get is a blue square (the default figure).

I believe the view is being created before the EObject is ready, or something.
What do you think?

thank you, its party solved anyway
Ugo
On 27-01-2011 18:12, Martin Flügge wrote:
> Hi Ugo,
>
> I managed to run your example diagram and played a bit around with it.
> The problem was that your customized UnknowEditPart was missing some
> null checks. After I added (see attached file) them it seems to work. :)
>
>
>
> Cheers,
>
> Martin
>
>
> Am 26.01.2011 10:31, schrieb Ugo Sangiorgi:
>> Hi Martin,
>> I've put into github, under the cdo-dawn branch.
>>
>> The Shapes app projects are under examples
>> https://github.com/ugosan/sketch/tree/cdo-dawn/examples
>> and the sketch core plugin is under:
>> https://github.com/ugosan/sketch/tree/cdo-dawn/plugins
>>
>> thank you very much for that!
>> Ugo
>>
>> On 25-01-2011 21:44, Martin Flügge wrote:
>>> Hi Ugo,
>>>
>>> I had a quick look at the problem. I would say that GMF should handle
>>> the call of getFigure() more carefully and not pass the result if it is
>>> null.
>>>
>>> But it might also indicate an error in Dawn. Could you please send me
>>> you code (the one with the "Diagram_") or put it on specific branch.
>>>
>>> Then I'll try to reproduce the problem to get a better understanding of
>>> what happens.
>>>
>>> Cheers,
>>>
>>> Martin
>>>
>>> Am 25.01.2011 17:38, schrieb Ugo Sangiorgi:
>>>> Exactly, I mean the node is not visible, although the editor gets dirty
>>>> and all :)
>>>> And it only happens with my custom figure, and for creation only
>>>> (editing labels and moving the node performs fine)
>>>>
>>>> I have two types of nodes:
>>>> -Squares/Triangles, which are classic GMF figures.
>>>> -Unknown, sketched figures (SVGSketchFigure that is constructed based on
>>>> a property of the node, which is an svg encoded in base64)
>>>>
>>>>
>>>> Here is how I create the figure:
>>>>
>>>> protected IFigure createNodeShape() {
>>>>
>>>> Bundle bundle =
>>>> Platform.getBundle("org.eclipse.sketch.examples.shapes");
>>>> try {
>>>>
>>>> NodeImpl n = (NodeImpl) getModel();
>>>> Unknown s = (Unknown) n.basicGetElement();
>>>>
>>>> if (s.getSvg() != null) {
>>>>
>>>> IWorkspaceRoot myWorkspaceRoot =
>>>> ResourcesPlugin.getWorkspace().getRoot();
>>>> File imgfile = myWorkspaceRoot.getLocation()
>>>> .append("s" + System.currentTimeMillis() + ".svg")
>>>> .toFile();
>>>>
>>>> Base64.decodeToFile(s.getSvg(), imgfile.getPath());
>>>>
>>>> RenderedImage img =
>>>> RenderedImageFactory.getInstance(imgfile.getPath());
>>>> img.getRenderInfo().setValues(0, 0, true, true,new RGB(255,
>>>> 0, 0), new RGB(255, 0, 0));
>>>>
>>>> primaryShape = new SVGSketchFigure(img);
>>>>
>>>> } else {
>>>> primaryShape = new
>>>> SVGSketchFigure(RenderedImageFactory.getInstance(bundle
>>>> .getEntry("/icons/square.svg")));
>>>> }
>>>>
>>>> } catch (IOException e) {
>>>> e.printStackTrace();
>>>> }
>>>> return primaryShape;
>>>>
>>>> }
>>>>
>>>> ...
>>>>
>>>> public class SVGSketchFigure extends ScalableImageFigure {
>>>>
>>>> /**
>>>> * @generated
>>>> */
>>>> private WrappingLabel fFigureSketchLabelFigure;
>>>>
>>>> /**
>>>> * @generated NOT
>>>> */
>>>> private RenderedImage image;
>>>>
>>>> /**
>>>> * @generated NOT
>>>> */
>>>> public SVGSketchFigure() {
>>>> super(null, true, true, true);
>>>> createContents();
>>>> }
>>>>
>>>> /**
>>>> * @generated NOT
>>>> */
>>>> public SVGSketchFigure(RenderedImage i) {
>>>> super(i, true, true, true);
>>>>
>>>> Unknown model = (Unknown) ((ShapeImpl) getModel())
>>>> .basicGetElement();
>>>> setToolTip(new Label(model.getElement()));
>>>>
>>>> this.image = i;
>>>>
>>>> this.setMaintainAspectRatio(true);
>>>>
>>>> this.setRenderedImage(image);
>>>>
>>>> createContents();
>>>>
>>>> //center the children
>>>> this.setLayoutManager(new StackLayout() {
>>>> public void layout(IFigure figure) {
>>>> Rectangle r = figure.getClientArea();
>>>> List children = figure.getChildren();
>>>> IFigure child;
>>>> Dimension d;
>>>> for (int i = 0; i< children.size(); i++) {
>>>> child = (IFigure) children.get(i);
>>>> d = child.getPreferredSize(r.width, r.height);
>>>> d.width = Math.min(d.width, r.width);
>>>> d.height = Math.min(d.height, r.height);
>>>> Rectangle childRect = new Rectangle(r.x
>>>> + (r.width - d.width) / 2, r.y
>>>> + (r.height - d.height) / 2, d.width,
>>>> d.height);
>>>> child.setBounds(childRect);
>>>> }
>>>> }
>>>> });
>>>> }
>>>>
>>>> /**
>>>> * @generated NOT
>>>> */
>>>> private void createContents() {
>>>>
>>>> fFigureSketchLabelFigure = new WrappingLabel();
>>>>
>>>> fFigureSketchLabelFigure.setAlignment(PositionConstants.CENT ER);
>>>> fFigureSketchLabelFigure.setText("");
>>>>
>>>> fFigureSketchLabelFigure.setBackgroundColor(ColorConstants.w hite);
>>>>
>>>> this.add(fFigureSketchLabelFigure);
>>>>
>>>> }
>>>>
>>>> /**
>>>> * @generated
>>>> */
>>>> public WrappingLabel getFigureSketchLabelFigure() {
>>>> return fFigureSketchLabelFigure;
>>>> }
>>>>
>>>> }
>>>>
>>>>
>>>>
>>>> On 25-01-2011 15:39, Martin Fluegge wrote:
>>>>>> Hi all, I'm getting this on my Dawn/GMF editor. My editor is not
>>>>>> refreshed, but when saved, the other editors are refreshed properly:
>>>>>
>>>>> With "not refreshed" you mean that the element you placed on your
>>>>> diagram is not visible?
>>>>>
>>>>> Following the excpetion I would say that the getFigure() method from
>>>>> your ShapeEditPart subclass seems the deleiver null. Did you customize
>>>>> the cdo in the affected class?
>>>>>
>>>>> Could you provide more information about the node? Does it have labels
>>>>> or any compartments?
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Martin
>>>>
>>>
>>
>
Previous Topic:EMF : from xml file to instance emf
Next Topic:[EMF Query 2]Parameter in XText query
Goto Forum:
  


Current Time: Fri Apr 26 15:59:01 GMT 2024

Powered by FUDForum. Page generated in 0.04502 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top