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;
}
}