protected final void init(final ActionSystemPartDef def) { this.functionContext = initFunctionContext(); if (def != null) { this.id = def.getId().content(); final Function labelFunction = FailSafeFunction.create(def.getLabel().content(), Literal.create(String.class)); this.labelFunctionResult = labelFunction.evaluate(this.functionContext); this.labelFunctionResult.attach( new Listener() { @Override public void handle(final Event event) { broadcast(new LabelChangedEvent()); } }); final Function toolTipFunction = FailSafeFunction.create(def.getToolTip().content(), Literal.create(String.class)); this.toolTipFunctionResult = toolTipFunction.evaluate(this.functionContext); this.toolTipFunctionResult.attach( new Listener() { @Override public void handle(final Event event) { broadcast(new ToolTipChangedEvent()); } }); this.description = def.getDescription().content(); for (ImageReference image : def.getImages()) { final Function imageFunction = FailSafeFunction.create(image.getImage().content(), Literal.create(ImageData.class)); final FunctionResult imageFunctionResult = imageFunction.evaluate(this.functionContext); final ImageData data = (ImageData) imageFunctionResult.value(); if (data != null) { this.images.add(data); } imageFunctionResult.dispose(); } for (ActionLocationHint locationHintDef : def.getLocationHints()) { final String locationHintText = locationHintDef.getReferenceEntityId().content(); if (locationHintText != null) { final SapphireActionLocationHint locationHint; if (locationHintDef instanceof ActionLocationHintBefore) { locationHint = new SapphireActionLocationHintBefore(locationHintText); } else if (locationHintDef instanceof ActionLocationHintAfter) { locationHint = new SapphireActionLocationHintAfter(locationHintText); } else { throw new IllegalStateException(); } this.locationHints.add(locationHint); } } } this.enabled = true; this.visible = true; }