Merge branch 'README' into ui-activities-1.5
diff --git a/pom.xml b/pom.xml
index 76ecb0c..fea5d8a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<groupId>net.sf.taverna.t2</groupId>
 		<artifactId>ui-activities</artifactId>
-		<version>1.3-SNAPSHOT</version>
+		<version>1.5</version>
 	</parent>
 	<groupId>net.sf.taverna.t2.ui-activities</groupId>
 	<artifactId>stringconstant-activity-ui</artifactId>
diff --git a/src/main/java/net/sf/taverna/t2/activities/stringconstant/actions/StringConstantActivityConfigurationAction.java b/src/main/java/net/sf/taverna/t2/activities/stringconstant/actions/StringConstantActivityConfigurationAction.java
index d7cb2f2..d43239c 100644
--- a/src/main/java/net/sf/taverna/t2/activities/stringconstant/actions/StringConstantActivityConfigurationAction.java
+++ b/src/main/java/net/sf/taverna/t2/activities/stringconstant/actions/StringConstantActivityConfigurationAction.java
@@ -24,15 +24,12 @@
 import java.awt.event.ActionEvent;
 
 import javax.swing.Action;
-import javax.swing.JOptionPane;
 
 import net.sf.taverna.t2.activities.stringconstant.StringConstantActivity;
 import net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean;
-import net.sf.taverna.t2.activities.stringconstant.servicedescriptions.StringConstantActivityIcon;
-import net.sf.taverna.t2.workbench.file.FileManager;
+import net.sf.taverna.t2.activities.stringconstant.views.StringConstantConfigView;
 import net.sf.taverna.t2.workbench.ui.actions.activity.ActivityConfigurationAction;
 import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationDialog;
-import net.sf.taverna.t2.workflowmodel.Dataflow;
 
 public class StringConstantActivityConfigurationAction extends
 		ActivityConfigurationAction<StringConstantActivity, StringConstantConfigurationBean> {
@@ -49,23 +46,17 @@
 	}
 
 	public void actionPerformed(ActionEvent e) {
-		StringConstantConfigurationBean bean = new StringConstantConfigurationBean();
-		String value = getActivity().getConfiguration().getValue();
-		Dataflow owningDataflow = FileManager.getInstance()
-		.getCurrentDataflow();
-
-		String newValue =
-			(String) JOptionPane.showInputDialog(owner,
-					"Enter value",
-					ActivityConfigurationDialog.getRelativeName(owningDataflow, activity),
-					JOptionPane.QUESTION_MESSAGE,
-					StringConstantActivityIcon.getStringConstantIcon(),
-					null,
-					value);
-		if (newValue!=null) {
-			bean.setValue(newValue);
-			ActivityConfigurationDialog.configureActivityStatic(owningDataflow, activity, bean);
+		ActivityConfigurationDialog currentDialog = ActivityConfigurationAction.getDialog(getActivity());
+		if (currentDialog != null) {
+			currentDialog.toFront();
+			return;
 		}
+		final StringConstantConfigView stringConstantConfigView = new StringConstantConfigView((StringConstantActivity)getActivity());
+		final ActivityConfigurationDialog<StringConstantActivity, StringConstantConfigurationBean> dialog =
+			new ActivityConfigurationDialog<StringConstantActivity, StringConstantConfigurationBean>(getActivity(), stringConstantConfigView);
+
+		ActivityConfigurationAction.setDialog(getActivity(), dialog);	
+		
 	}
 
 }
diff --git a/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateAction.java b/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateAction.java
index e34767a..4bdbd85 100644
--- a/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateAction.java
+++ b/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateAction.java
@@ -51,7 +51,7 @@
 	private static Logger logger = Logger.getLogger(AddStringConstantTemplateAction.class);
 
 	public AddStringConstantTemplateAction(){
-		super(insertSection, 70);
+		super(insertSection, 800);
 	}
 
 	@Override
@@ -62,7 +62,7 @@
 	
 	@Override
 	protected Action createAction() {
-		AbstractAction action = new AbstractAction("String constant", ActivityIconManager.getInstance()
+		AbstractAction action = new AbstractAction("Text constant", ActivityIconManager.getInstance()
 				.iconForActivity(new StringConstantActivity())){
 
 					public void actionPerformed(ActionEvent e) {
diff --git a/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateMenuAction.java b/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateMenuAction.java
index fd76493..2e73317 100644
--- a/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateMenuAction.java
+++ b/src/main/java/net/sf/taverna/t2/activities/stringconstant/menu/AddStringConstantTemplateMenuAction.java
@@ -52,7 +52,7 @@
 @SuppressWarnings("serial")
 public class AddStringConstantTemplateMenuAction extends AbstractMenuAction {
 
-	private static final String ADD_STRING_CONSTANT = "String constant";
+	private static final String ADD_STRING_CONSTANT = "Text constant";
 
 	private static final URI ADD_STRING_CONSTANT_URI = URI
 	.create("http://taverna.sf.net/2008/t2workbench/menu#graphMenuAddStringConstant");
@@ -60,7 +60,7 @@
 	private static Logger logger = Logger.getLogger(AddStringConstantTemplateMenuAction.class);
 
 	public AddStringConstantTemplateMenuAction(){
-		super(InsertMenu.INSERT, 25, ADD_STRING_CONSTANT_URI);
+		super(InsertMenu.INSERT, 800, ADD_STRING_CONSTANT_URI);
 	}
 
 	@Override
diff --git a/src/main/java/net/sf/taverna/t2/activities/stringconstant/servicedescriptions/StringConstantTemplateService.java b/src/main/java/net/sf/taverna/t2/activities/stringconstant/servicedescriptions/StringConstantTemplateService.java
index 13422b1..f5d432f 100644
--- a/src/main/java/net/sf/taverna/t2/activities/stringconstant/servicedescriptions/StringConstantTemplateService.java
+++ b/src/main/java/net/sf/taverna/t2/activities/stringconstant/servicedescriptions/StringConstantTemplateService.java
@@ -31,7 +31,9 @@
 
 public class StringConstantTemplateService extends AbstractTemplateService<StringConstantConfigurationBean>{
 	
-	private static final String STRINGCONSTANT = "String constant";
+	public static final String DEFAULT_VALUE = "Add your own value here";
+
+	private static final String STRINGCONSTANT = "Text constant";
 
 	private static final URI providerId = URI
 	.create("http://taverna.sf.net/2010/service-provider/stringconstant");
@@ -44,7 +46,7 @@
 	@Override
 	public StringConstantConfigurationBean getActivityConfiguration() {
 		StringConstantConfigurationBean stringConstantConfigurationBean = new StringConstantConfigurationBean();
-		stringConstantConfigurationBean.setValue("Add your own value here");
+		stringConstantConfigurationBean.setValue(DEFAULT_VALUE);
 		return stringConstantConfigurationBean;
 	}
 
diff --git a/src/main/java/net/sf/taverna/t2/activities/stringconstant/views/StringConstantActivityContextualView.java b/src/main/java/net/sf/taverna/t2/activities/stringconstant/views/StringConstantActivityContextualView.java
index 5502e39..74c2b21 100644
--- a/src/main/java/net/sf/taverna/t2/activities/stringconstant/views/StringConstantActivityContextualView.java
+++ b/src/main/java/net/sf/taverna/t2/activities/stringconstant/views/StringConstantActivityContextualView.java
@@ -24,6 +24,9 @@
 
 import javax.swing.Action;
 
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+
 import net.sf.taverna.t2.activities.stringconstant.StringConstantActivity;
 import net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean;
 import net.sf.taverna.t2.activities.stringconstant.actions.StringConstantActivityConfigurationAction;
@@ -31,6 +34,8 @@
 import net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
 
 public class StringConstantActivityContextualView extends HTMLBasedActivityContextualView<StringConstantConfigurationBean> {
+	
+	private static int MAX_LENGTH=100;
 
 	private static final long serialVersionUID = -553974544001808511L;
 
@@ -40,13 +45,15 @@
 
 	@Override
 	public String getViewTitle() {
-		return "String constant";
+		return "Text constant";
 	}
 
 
 	@Override
 	protected String getRawTableRowsHtml() {
-		String html = "<tr><td>Value</td><td>"+getConfigBean().getValue()+"</td></tr>";
+		String v = StringUtils.abbreviate(getConfigBean().getValue(), MAX_LENGTH);
+		v = StringEscapeUtils.escapeHtml(v);
+		String html = "<tr><td>Value</td><td>"+v+"</td></tr>";
 		return html;
 	}
 
diff --git a/src/main/java/net/sf/taverna/t2/activities/stringconstant/views/StringConstantConfigView.java b/src/main/java/net/sf/taverna/t2/activities/stringconstant/views/StringConstantConfigView.java
new file mode 100644
index 0000000..2aaad48
--- /dev/null
+++ b/src/main/java/net/sf/taverna/t2/activities/stringconstant/views/StringConstantConfigView.java
@@ -0,0 +1,212 @@
+/**
+ * 
+ */
+package net.sf.taverna.t2.activities.stringconstant.views;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collections;
+
+import javax.help.CSH;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextPane;
+import javax.swing.event.AncestorEvent;
+import javax.swing.event.AncestorListener;
+
+import net.sf.taverna.t2.activities.stringconstant.StringConstantActivity;
+import net.sf.taverna.t2.activities.stringconstant.StringConstantConfigurationBean;
+import net.sf.taverna.t2.activities.stringconstant.servicedescriptions.StringConstantTemplateService;
+import net.sf.taverna.t2.lang.ui.FileTools;
+import net.sf.taverna.t2.lang.ui.KeywordDocument;
+import net.sf.taverna.t2.lang.ui.LineEnabledTextPanel;
+import net.sf.taverna.t2.lang.ui.LinePainter;
+import net.sf.taverna.t2.lang.ui.NoWrapEditorKit;
+import net.sf.taverna.t2.visit.VisitReport;
+import net.sf.taverna.t2.workbench.ui.views.contextualviews.activity.ActivityConfigurationPanel;
+import net.sf.taverna.t2.workflowmodel.health.HealthCheck;
+import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException;
+
+/**
+ * @author alanrw
+ *
+ */
+public class StringConstantConfigView extends ActivityConfigurationPanel<StringConstantActivity, StringConstantConfigurationBean> {
+	
+	/** The configuration bean used to configure the activity */
+	private StringConstantConfigurationBean configuration;
+	
+	/** The text */
+	private JEditorPane scriptTextArea;
+
+	private StringConstantActivity activity;
+	
+	private static final Color LINE_COLOR = new Color(225,225,225);
+	
+	public StringConstantConfigView(StringConstantActivity activity) {
+		this.activity = activity;
+		setLayout(new GridBagLayout());
+		initialise();
+		this.addAncestorListener(new AncestorListener() {
+
+			@Override
+			public void ancestorAdded(AncestorEvent event) {
+				StringConstantConfigView.this.whenOpened();
+			}
+
+			@Override
+			public void ancestorMoved(AncestorEvent event) {
+				// TODO Auto-generated method stub
+				
+			}
+
+			@Override
+			public void ancestorRemoved(AncestorEvent event) {
+				// TODO Auto-generated method stub
+				
+			}});
+	}
+	
+    public void whenOpened() {
+    	scriptTextArea.requestFocus();
+    	if (scriptTextArea.getText().equals(StringConstantTemplateService.DEFAULT_VALUE)) {
+    		scriptTextArea.selectAll();
+    	}
+    }
+
+	private void initialise() {
+		CSH
+		.setHelpIDString(
+				this,
+				"net.sf.taverna.t2.activities.stringconstant.views.StringConstantConfigView");
+		configuration = activity.getConfiguration();
+		
+		setBorder(javax.swing.BorderFactory.createTitledBorder(null, null,
+				javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
+				javax.swing.border.TitledBorder.DEFAULT_POSITION,
+				new java.awt.Font("Lucida Grande", 1, 12)));
+		
+		JPanel scriptEditPanel = new JPanel(new BorderLayout());
+		
+		scriptTextArea = new JTextPane();
+		new LinePainter(scriptTextArea, LINE_COLOR);
+
+		// NOTE: Due to T2-1145 - always set editor kit BEFORE setDocument
+		scriptTextArea.setEditorKit( new NoWrapEditorKit() );
+		scriptTextArea.setFont(new Font("Monospaced",Font.PLAIN,14));
+		scriptTextArea.setText(configuration.getValue());
+		scriptTextArea.setCaretPosition(0);
+		scriptTextArea.setPreferredSize(new Dimension(200, 100));
+		
+		scriptEditPanel.add(new LineEnabledTextPanel(scriptTextArea), BorderLayout.CENTER);
+		
+		GridBagConstraints outerConstraint = new GridBagConstraints();
+		outerConstraint.anchor = GridBagConstraints.FIRST_LINE_START;
+		outerConstraint.gridx = 0;
+		outerConstraint.gridy = 0;
+
+		outerConstraint.fill = GridBagConstraints.BOTH;
+		outerConstraint.weighty = 0.1;
+		outerConstraint.weightx = 0.1;
+		add(scriptEditPanel, outerConstraint);
+		
+		JButton loadScriptButton = new JButton("Load text");
+		loadScriptButton.setToolTipText("Load text from a file");
+		loadScriptButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+			    String newScript = FileTools.readStringFromFile(StringConstantConfigView.this, "Load text", ".txt");
+				if (newScript != null) {
+					scriptTextArea.setText(newScript);
+					scriptTextArea.setCaretPosition(0);
+				}
+			}
+		});
+
+		JButton saveRScriptButton = new JButton("Save text");
+		saveRScriptButton.setToolTipText("Save the text to a file");
+		saveRScriptButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				FileTools.saveStringToFile(StringConstantConfigView.this, "Save text", ".txt", scriptTextArea.getText());
+			}
+		});
+
+		JButton clearScriptButton = new JButton("Clear text");
+		clearScriptButton
+				.setToolTipText("Clear current text from the edit area");
+		clearScriptButton.addActionListener(new ActionListener() {
+
+			public void actionPerformed(ActionEvent e) {
+				cleaText();
+			}
+
+		});
+
+		JPanel buttonPanel = new JPanel();
+		buttonPanel.setLayout(new FlowLayout());
+		buttonPanel.add(loadScriptButton);
+		buttonPanel.add(saveRScriptButton);
+		buttonPanel.add(clearScriptButton);
+		
+		scriptEditPanel.add(buttonPanel, BorderLayout.SOUTH);
+		setPreferredSize(new Dimension(600,500));
+		this.validate();
+		
+	}
+	
+	/**
+	 * Method for clearing the script
+	 * 
+	 */
+	private void cleaText() {
+		if (JOptionPane.showConfirmDialog(this,
+				"Do you really want to clear the text?",
+				"Clearing the script", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
+			scriptTextArea.setText("");
+		}
+
+	}
+
+
+	@Override
+	public boolean checkValues() {
+		return true;
+	}
+
+	@Override
+	public StringConstantConfigurationBean getConfiguration() {
+		return configuration;
+	}
+
+	@Override
+	public boolean isConfigurationChanged() {
+		return !scriptTextArea.getText().equals(configuration.getValue());
+	}
+
+	@Override
+	public void noteConfiguration() {
+		configuration = makeConfiguration();
+	}
+
+	private StringConstantConfigurationBean makeConfiguration() {
+		StringConstantConfigurationBean newConfig = new StringConstantConfigurationBean();
+		newConfig.setValue(scriptTextArea.getText());
+		return newConfig;
+	}
+
+	@Override
+	public void refreshConfiguration() {
+		// TODO Auto-generated method stub
+		
+	}
+
+}