UI to set Model & element properties

I am trying to extend the modeling capabilities from Visual Paradigm.

I have a bunch of tagged values, stereotypes and also references to be created. I do not want to go into each element of the diagram and do them. I want to have a dialogue box which will bring up the appropriate elements I need and I want this dialogue to accept the values from a LOV and then update the model elements with those values.

Can this be achieved?

Hi Shivag,

Yes it can.

The plugin structure is very powerful, however there is not much documentation on samples.
You will need to dig in and try it. Do not expect a ready made solution, it is quite a bit of work.

I do have some dialogs that do some control, and they work fine. I am having issues with plugins via commandline now.

Remebmer that you will need the VP IDialog interface to get a dialog running.

Good luck.

Hi shivag,

I can include a dialog (can still be refactored, I am still learning this VP) and the rest that makes it tick…

Here is the class that creates the initial dialog… contains some textfields and checkboxes

public class CreateProjectStructureDialog implements IDialogHandler {

	private IctMessenger messenger = new IctMessenger();
	private IDialog _dialog;

	// ------------------------------------
	private boolean isAborted;

	public boolean isAborted() {
		return isAborted;
	}

	public void setAborted(boolean isAborted) {
		this.isAborted = isAborted;
	}

	/**
	 * 
	 * GETTERS
	 */

	private JTextField project;

	public String getProject() {
		return project.getText();
	}

	private JTextField viewpoint;

	public String getViewpoint() {
		return viewpoint.getText();
	}

	private JCheckBox chkBM = null;

	public boolean isBM() {
		return chkBM.isSelected();
	}

	private JCheckBox chkAA;

	public boolean isAA() {
		return chkAA.isSelected();
	}

	private JCheckBox chkPA;

	public boolean isPA() {
		return chkPA.isSelected();
	}

	private JCheckBox chkIA;

	public boolean isIA() {
		return chkIA.isSelected();
	}

	private JCheckBox chkApA;

	public boolean isAPA() {
		return chkApA.isSelected();
	}

	private JCheckBox chkTA;

	public boolean isTA() {
		return chkTA.isSelected();
	}

	private JCheckBox chkPPV;

	public boolean isPPV() {
		return chkPPV.isSelected();
	}

	private JCheckBox chkHLPV;

	public boolean isHLPV() {
		return chkHLPV.isSelected();
	}

	private JCheckBox chkDPV;

	public boolean isDPV() {
		return chkDPV.isSelected();
	}

	/**
	 * 
	 */
	public Component getComponent() {

		try {

			messenger.send(IctMessenger.Type.INFO, "getComponent() - Starts.");

			Container cp = new Container();
			cp.setBounds(100, 100, 970, 600);
			cp.setLayout(new BorderLayout());

			JPanel contentPanel = new JPanel();

			{
				{
					JPanel panel = new JPanel();

					panel.setLayout(new FormLayout(

					new ColumnSpec[] { FormFactory.RELATED_GAP_COLSPEC,
							FormFactory.DEFAULT_COLSPEC,
							FormFactory.RELATED_GAP_COLSPEC,
							ColumnSpec.decode("max(100dlu;default)"),
							FormFactory.RELATED_GAP_COLSPEC,
							ColumnSpec.decode("max(100dlu;default)"),
							FormFactory.RELATED_GAP_COLSPEC,
							ColumnSpec.decode("default:grow"),
							FormFactory.RELATED_GAP_COLSPEC,
							ColumnSpec.decode("max(100dlu;default)"),
							FormFactory.RELATED_GAP_COLSPEC,
							ColumnSpec.decode("default:grow"),
							FormFactory.RELATED_GAP_COLSPEC, },

					new RowSpec[] { FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC,
							FormFactory.RELATED_GAP_ROWSPEC,
							FormFactory.DEFAULT_ROWSPEC, }));

					{
						JLabel lblProject = new JLabel("Project:");
						lblProject
								.setHorizontalAlignment(SwingConstants.TRAILING);
						panel.add(lblProject, "4, 6, right, default");
					}
					{
						project = new JTextField();
						panel.add(project, "6, 6, fill, default");
						project.setColumns(10);
					}
					{
						JLabel lblViewPoint = new JLabel("Viewpoint:");
						lblViewPoint
								.setHorizontalAlignment(SwingConstants.TRAILING);
						panel.add(lblViewPoint, "4, 8, right, default");
					}
					{
						viewpoint = new JTextField();
						panel.add(viewpoint, "6, 8, fill, default");
						viewpoint.setColumns(10);
					}

					{
						JLabel lblBusinessAnalysis = new JLabel(
								"Business Analysis");
						lblBusinessAnalysis
								.setHorizontalAlignment(SwingConstants.CENTER);
						lblBusinessAnalysis.setFont(new Font("Tahoma",
								Font.BOLD, 13));
						panel.add(lblBusinessAnalysis, "4, 14");
					}
					{
						chkBM = new JCheckBox("Business motivation");
						panel.add(chkBM, "4, 16");
					}
					{
						JLabel lblArchitectureAnalysis = new JLabel(
								"Abstract Analysis");
						lblArchitectureAnalysis
								.setHorizontalAlignment(SwingConstants.CENTER);
						lblArchitectureAnalysis.setFont(new Font("Tahoma",
								Font.BOLD, 13));
						panel.add(lblArchitectureAnalysis, "6, 14");
					}

					{
						chkAA = new JCheckBox("Abstract architecture");
						panel.add(chkAA, "6, 16");
					}
					{
						chkPA = new JCheckBox("Process architecture");
						panel.add(chkPA, "6, 18");
					}
					{
						chkIA = new JCheckBox("Information architecture");
						panel.add(chkIA, "6, 20");
					}

					{
						chkApA = new JCheckBox("Application architecture");
						panel.add(chkApA, "6, 22");
					}
					{
						chkTA = new JCheckBox("Technical architecture");
						panel.add(chkTA, "6, 24");
					}

					{
						JLabel lblDetailedAnalysis = new JLabel(
								"Detailed Analysis");
						lblDetailedAnalysis
								.setHorizontalAlignment(SwingConstants.CENTER);
						lblDetailedAnalysis.setFont(new Font("Tahoma",
								Font.BOLD, 13));
						panel.add(lblDetailedAnalysis, "10, 14");
					}

					{
						chkPPV = new JCheckBox("Process phase view");
						panel.add(chkPPV, "10, 16");
					}

					{
						chkHLPV = new JCheckBox("High level process view");
						panel.add(chkHLPV, "10, 18");
					}

					{
						chkDPV = new JCheckBox("Detailed process view");
						panel.add(chkDPV, "10, 20");
					}

					contentPanel.add(panel, BorderLayout.NORTH);

					JPanel buttonPane = new JPanel();

					{
						JButton okButton = new JButton("Build");

						okButton.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent e) {
								ok();
							}
						});
						buttonPane.add(okButton);
					}

					{
						JButton cancelButton = new JButton("Cancel");
						cancelButton.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent e) {
								canClosed();
							}
						});

						buttonPane.add(cancelButton);
					}

					panel.add(buttonPane, "10, 26");
				}

			}

			cp.add(contentPanel);
			messenger.send(IctMessenger.Type.INFO, "getComponent() - Ends.");

			return cp;

		} catch (Exception ex) {
			messenger.send(IctMessenger.Type.ERROR,
					"getComponent() - Prepare dialog error.");
		}
		return null;
	}

	/**
	 * 
	 */
	private void ok() {
		this._dialog.close();
	}

	/**
	 * 
	 */
	public void prepare(IDialog dialog) {
		this._dialog = dialog;
		this._dialog.setModal(true);
		this._dialog.setTitle("ICTE-MODE-PROJ-STRU");
		this._dialog.setResizable(false);
		this._dialog.pack();
		this.project.setText(IctLiterals.getDefaultProject());
		this.viewpoint.setText(IctLiterals.getDefaultViewpoint());
	}

	/**
	 * 
	 */
	public void shown() {
	}

	/**
	 * 
	 */
	public boolean canClosed() {
		this.isAborted = true;
		ok();
		return true;
	}

	/**
	 * 
	 */
	public CreateProjectStructureDialog() {

		messenger.send(IctMessenger.Type.INFO,
				"CreateProjectStructureDialog() - Prepare dialog.");

		IDialog dia = new IDialog() {

			@Override
			public void setTitle(String title) {
				// TODO Auto-generated method stub
			}

			@Override
			public void setSize(int width, int height) {
				// TODO Auto-generated method stub
			}

			@Override
			public void setSize(Dimension size) {
				// TODO Auto-generated method stub
			}

			@Override
			public void setResizable(boolean resizable) {
				// TODO Auto-generated method stub
			}

			@Override
			public void setModal(boolean modal) {
				// TODO Auto-generated method stub
			}

			@Override
			public void setLocation(int x, int y) {
				// TODO Auto-generated method stub
			}

			@Override
			public void setLocation(Point location) {
				// TODO Auto-generated method stub
			}

			@Override
			public void setBounds(int x, int y, int width, int height) {
				// TODO Auto-generated method stub
			}

			@Override
			public void pack() {
				// TODO Auto-generated method stub
			}

			@Override
			public boolean isResizable() {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public boolean isModal() {
				// TODO Auto-generated method stub
				return false;
			}

			@Override
			public int getY() {
				// TODO Auto-generated method stub
				return 0;
			}

			@Override
			public int getX() {
				// TODO Auto-generated method stub
				return 0;
			}

			@Override
			public int getWidth() {
				// TODO Auto-generated method stub
				return 0;
			}

			@Override
			public String getTitle() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public Dimension getSize() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public Point getLocation() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public int getHeight() {
				// TODO Auto-generated method stub
				return 0;
			}

			@Override
			public void close() {
				// TODO Auto-generated method stub
			}
		};

		try {

			getComponent();
			prepare(dia);

		} catch (Exception ex) {
			messenger.send(IctMessenger.Type.ERROR,
					"CreateProjectStructureDialog() - Prepare dialog error.");
		}

		messenger.send(IctMessenger.Type.INFO,
				"CreateProjectStructureDialog() - Prepared dialog.");
	}


Next is the controller class that invokes/shows the dialog and retrieves some values:



public class CreateProjectStructureController implements VPActionController {

	IctMessenger messenger = new IctMessenger();

	@Override
	public void performAction(VPAction action) {

		try {
			messenger.send(IctMessenger.Type.INFO,
					"CreateProjectStructureController() - Initializing.");
			createProjectStructureElement(ApplicationManager.instance()
					.getDiagramManager());
			messenger.send(IctMessenger.Type.INFO,
					"CreateProjectStructureController() - Initialized.");
		} catch (Exception ex) {
			messenger.send(IctMessenger.Type.ERROR,
					"CreateProjectStructureController() - **INVESTIGATE**");
		}
	}

	@Override
	public void update(VPAction action) {
	}

	/**
	 * 
	 * @param diagramManager
	 * @param factory
	 */
	private void createProjectStructureElement(DiagramManager diagramManager) {

		ViewManager viewManager = null;
		CreateProjectStructureDialog dialogHandler = null;

		try {

			messenger.send(IctMessenger.Type.INFO,
					"createProjectStructureElement() - Initializing.");

			viewManager = ApplicationManager.instance().getViewManager();

			messenger
					.send(IctMessenger.Type.INFO,
							"createProjectStructureElement() - Initialized viewManager.");

			dialogHandler = new CreateProjectStructureDialog();

			messenger
					.send(IctMessenger.Type.INFO,
							"createProjectStructureElement() - Initialized dialogHandler.");

		} catch (Exception ex) {
			messenger
					.send(IctMessenger.Type.ERROR,
							"createProjectStructureElement() - Setup failure **INVESTIGATE**");
		}

		List<IctModelStructureHeader> list = null;

		try {
			// --- Get the input parameters needed to construct framework ---
			messenger.send(IctMessenger.Type.INFO,
					"createProjectStructureElement() - Show dialog.");

			viewManager.showDialog(dialogHandler);

			// --- Cancel or Close pressed ---
			if (dialogHandler.isAborted()) {
				messenger
						.send(IctMessenger.Type.INFO,
								"createProjectStructureElement() - User pressed Cancel or Close");
				return;
			}

			messenger
					.send(IctMessenger.Type.INFO,
							"createProjectStructureElement() - Dialog returns run data.");

		} catch (Exception ex) {
			messenger
					.send(IctMessenger.Type.ERROR,
							"createProjectStructureElement() - Dialog failure **INVESTIGATE**");
		}

		try {

			// --- Get dialog variables ---
			String myProject = null;
			String myViewpoint = null;
			try {

				IctProjectStructure struct = new IctProjectStructure(
						dialogHandler);
				myProject = struct.getProject();
				myViewpoint = struct.getViewpoint();
				list = struct.getModelList();

			} catch (Exception ex) {
				messenger.send(IctMessenger.Type.ERROR,
						"createProjectStructureElement() - Data Error **INVESTIGATE** "
								+ ex.getMessage());
			}

			new CreateProjectStructureEngine(diagramManager, myProject,
					myViewpoint, list);

		} catch (Exception ex) {
			messenger.send(IctMessenger.Type.ERROR,
					"createProjectStructureElement() - **INVESTIGATE**");

		}
	}

The following is the xml to define and link the menu and the plugin


<plugin id="IctEngineer"
	name="ICTTools"
	description="ICT Tools."
	provider="Imas-ICT Turnhout"
	class="com.blabla.misc.ictengineer.visualparadigm.plugin.SetupControl">

	<actionSets>
	
		<actionSet id="ICTActionSet"> 
			<toolbar id="mainToolbar" orientation="north" index="last"/>
 			<menu id="imasMenu" label="Imas-ICT Tools" mnemonic="I" menuPath="Tools/Report">
 			</menu>
		
			
			<action id="CreateProjectStructureController" actionType="generalAction"
				label="Create Project Model Structure..."
				style="normal"
				menuPath="Tools/imasMenu/#">
					<actionController class="com.blabla.misc.ictengineer.visualparadigm.plugin.actions.CreateProjectStructureController"/>
			</action>


			

		</actionSet>		
	</actionSets>
	
</plugin>


ok that gives you a menu under tools and a dialog to enter data…

basically my tagged values class under development:



package com.blabla.misc.ictengineer.visualparadigm.classes;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.vp.plugin.model.IModelElement;
import com.vp.plugin.model.ITaggedValue;
import com.vp.plugin.model.ITaggedValueContainer;
import com.vp.plugin.model.factory.IModelElementFactory;

/**
 * 
 * @author gproost
 * 
 */

public class IctTags {

	private IctMessenger messenger = new IctMessenger();

	public List<String> tagsClass = new ArrayList<String>();
	public List<String> tagsAttribute = new ArrayList<String>();

	/**
	 * 
	 */

	public IctTags() {

		tagsClass.add(IctLiterals.getClassTableTagName());
		tagsClass.add(IctLiterals.getCrcTagName());
		tagsAttribute.add(IctLiterals.getAttributeMandatoryTagName());
		tagsAttribute.add(IctLiterals.getAttributeUniqueTagName());
		tagsAttribute.add(IctLiterals.getAttributeLengthTagName());
		tagsAttribute.add(IctLiterals.getAttributeRangeTagName());
	}

	/**
	 * 
	 * @param element
	 */
	public void validate(IModelElement element) {
		if (element.getModelType()
				.equals(IModelElementFactory.MODEL_TYPE_CLASS)) {
			for (String me : tagsClass)
				verifyElementHasTag(element, me);

		} else if (element.getModelType().equals(
				IModelElementFactory.MODEL_TYPE_ATTRIBUTE)) {
			for (String me : tagsAttribute)
				verifyElementHasTag(element, me);
		}
	}

	/**
	 * 
	 * @param element
	 * @param tagName
	 */
	private void verifyElementHasTag(IModelElement element, String tagName) {

		ITaggedValueContainer tags = element.getTaggedValues();

		if (tags == null) {
			tags = IModelElementFactory.instance().createTaggedValueContainer();
		}

		ITaggedValue tag = tags.getTaggedValueByName(tagName);

		if (tag == null) {

			ITaggedValue newTag = IModelElementFactory.instance()
					.createTaggedValue();

			newTag.setName(tagName);
			newTag.setValue("");
			tags.addTaggedValue(newTag);
			element.setTaggedValues(tags);

		}
	}

	/**
	 * 
	 * @param element
	 * @param tagName
	 * @param tagValue
	 */
	public void setElementTag(IModelElement element, String tagName,
			String tagValue) {

		try {

			ITaggedValueContainer tags = element.getTaggedValues();

			if (tags == null) {
				tags = IModelElementFactory.instance()
						.createTaggedValueContainer();
			} else {
				tags = enforcedSingleKeysOnTags(tags, tagName);
			}

			ITaggedValue tag = tags.getTaggedValueByName(tagName);

			if (tag == null) {
				ITaggedValue newTag = IModelElementFactory.instance()
						.createTaggedValue();
				newTag.setName(tagName);
				newTag.setValue(tagValue);
				tags.addTaggedValue(newTag);
				element.setTaggedValues(tags);
			} else {
				tag.setValue(tagValue);
			}

			// messenger.sendMessage(IctMessenger.Type.INFO,
			// "setElementTag() - changed - Element: " + element.getName()
			// + " Tag: " + tagName + " TagValue: " + tagValue);

		} catch (Exception ex) {
			messenger.send(IctMessenger.Type.ERROR,
					"setElementTag() - Cannot set tag. " + ex.getMessage());
		}
	}

	/**
	 * 
	 * @param tags
	 * @param tagName
	 */
	private ITaggedValueContainer enforcedSingleKeysOnTags(
			ITaggedValueContainer tags, String tagName) {

		try {

			Iterator<?> iterator = tags.taggedValueIterator();

			int tagNumber = 0; // we will keep the first one

			while (iterator.hasNext()) {
				ITaggedValue tv = (ITaggedValue) iterator.next();

				if (tv.getName().equals(tagName)) {
					tagNumber++;
					if (tagNumber > 1) {
						tags.removeChild(tv);
						tv.delete();
					}
				}
			}

			int totalRemoved = --tagNumber;
			if (totalRemoved > 1) {
				messenger.send(IctMessenger.Type.WARNING,
						"enforcedSingleKeysOnCRCTags() - Too many: '" + tagName
								+ "' tags; removed: " + totalRemoved + ".");
			}

		} catch (Exception ex) {
			messenger.send(
					IctMessenger.Type.ERROR,
					"enforcedSingleKeysOnTags() - Cannot remove duplicate tag(s): '" + tagName
								+ "' ");
		}

		return tags;
	}

	/**
	 * 
	 * @param element
	 * @param tagName
	 * @return
	 */
	public String getElementTagValue(IModelElement element, String tagName) {

		try {

			ITaggedValueContainer tags = element.getTaggedValues();
			ITaggedValue queryTagValue = tags.getTaggedValueByName(tagName);
			String tagValue = queryTagValue.getValueAsString();

			// messenger.sendMessage(
			// IctMessenger.Type.INFO,
			// "getElementTagValue() - found - Element: "
			// + element.getName() + " Tag: " + tagName
			// + " TagValue: " + tagValue);

			return tagValue;

		} catch (Exception ex) {
			messenger
					.send(IctMessenger.Type.ERROR,
							"getElementTagValue() - Cannot get tag. "
									+ ex.getMessage());
		}
		return null;
	}

}
1 Like