incubator-kalumet-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbono...@apache.org
Subject svn commit: r1205585 [13/23] - in /incubator/kalumet/trunk: ./ console/ console/src/main/java/org/apache/kalumet/console/app/ console/src/main/resources/org/apache/kalumet/console/app/templates/
Date Wed, 23 Nov 2011 20:52:25 GMT
Added: incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/GeneralPane.java
URL: http://svn.apache.org/viewvc/incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/GeneralPane.java?rev=1205585&view=auto
==============================================================================
--- incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/GeneralPane.java (added)
+++ incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/GeneralPane.java Wed Nov 23 20:52:16 2011
@@ -0,0 +1,1385 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console.app;
+
+import java.util.Iterator;
+
+import nextapp.echo2.app.Button;
+import nextapp.echo2.app.ContentPane;
+import nextapp.echo2.app.Extent;
+import nextapp.echo2.app.Grid;
+import nextapp.echo2.app.Insets;
+import nextapp.echo2.app.Label;
+import nextapp.echo2.app.Row;
+import nextapp.echo2.app.SelectField;
+import nextapp.echo2.app.TextArea;
+import nextapp.echo2.app.TextField;
+import nextapp.echo2.app.event.ActionEvent;
+import nextapp.echo2.app.event.ActionListener;
+import nextapp.echo2.app.list.DefaultListModel;
+import nextapp.echo2.extras.app.TabPane;
+import nextapp.echo2.extras.app.layout.TabPaneLayoutData;
+import org.apache.kalumet.console.configuration.ConfigurationManager;
+import org.apache.kalumet.model.*;
+import org.apache.kalumet.ws.client.AgentClient;
+
+/**
+ * Environment general pane.
+ */
+public class GeneralPane extends TabPane {
+
+    private EnvironmentWindow parent;
+    private TextField nameField;
+    private TextField groupField;
+    private SelectField agentField;
+    private SelectField tagField;
+    private SelectField autoUpdateField;
+    private TextArea notesArea;
+    private TextArea weblinksArea;
+    private Grid freeFieldsGrid;
+    private Grid variablesGrid;
+    private Grid logFilesGrid;
+    private TextField newFreeFieldNameField;
+    private TextField newFreeFieldContentField;
+    private TextField newVariableName;
+    private TextField newVariableValue;
+    private TextField newLogFileName;
+    private TextField newLogFilePath;
+    private SelectField newLogFileAgent;
+
+    // agent status thread
+    class AgentStatusThread extends Thread {
+
+        public boolean ended = false;
+        public boolean failure = false;
+        public String message;
+
+        public void run() {
+            try {
+                // load Kalumet configuration
+                Kalumet kalumet = ConfigurationManager.loadStore();
+                // looking for the agent
+                Agent agent = kalumet.getAgent((String) agentField.getSelectedItem());
+                if (agent == null) {
+                    throw new IllegalArgumentException("agent not found.");
+                }
+                // call the WebService
+                AgentClient client = new AgentClient(agent.getHostname(), agent.getPort());
+                message = "Agent " + agent.getId() + " version " + client.getVersion() + " started.";
+            } catch (Exception e) {
+                failure = true;
+                message = "Agent status check failed: " + e.getMessage();
+            } finally {
+                ended = true;
+            }
+        }
+
+    }
+
+    // edit free field
+    private ActionListener editFreeField = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // edit free field
+            // get the free field name
+            String freeFieldName = event.getActionCommand();
+            // get the free field fields
+            String newFreeFieldNameValue = ((TextField) GeneralPane.this.getComponent("ffname_" + parent.getEnvironmentName() + "_" + freeFieldName)).getText();
+            String newFreeFieldContentValue = ((TextField) GeneralPane.this.getComponent("ffcontent_" + parent.getEnvironmentName() + "_" + freeFieldName)).getText();
+            // check if the mandatory fields are presents
+            if (newFreeFieldNameValue == null || newFreeFieldNameValue.trim().length() < 1 || newFreeFieldContentValue == null || newFreeFieldContentValue.trim().length() < 1) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("freefield.mandatory"));
+                return;
+            }
+            // check if the user try to change the free field name
+            if (!freeFieldName.equals(newFreeFieldNameValue)) {
+                // if this case, check if the free field name is already in used
+                if (parent.getEnvironment().getFreeField(newFreeFieldNameValue) != null) {
+                    KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("freefield.exists"), getEnvironmentWindow().getEnvironmentName());
+                    return;
+                }
+            }
+            // get the freefield object in the parent environment
+            FreeField freeField = parent.getEnvironment().getFreeField(freeFieldName);
+            if (freeField == null) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("freefield.notfound"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // add a change event
+            parent.getChangeEvents().add("Change free field " + freeField.getName() + " / " + freeField.getContent());
+            // update the free field object
+            freeField.setName(newFreeFieldNameValue);
+            freeField.setContent(newFreeFieldContentValue);
+            // change the updated flag
+            parent.setUpdated(true);
+            // update the journal log tab pane
+            parent.updateJournalPane();
+            // update only the pane
+            update();
+        }
+    };
+    // create free field
+    private ActionListener createFreeField = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // get the free field value
+            String newFreeFieldNameValue = newFreeFieldNameField.getText();
+            String newFreeFieldContentValue = newFreeFieldContentField.getText();
+            // check if the mandatory fields are presents
+            if (newFreeFieldNameValue == null || newFreeFieldNameValue.trim().length() < 1 || newFreeFieldContentValue == null || newFreeFieldContentValue.trim().length() < 1) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("freefield.mandatory"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // create the new free field
+            FreeField freeField = new FreeField();
+            freeField.setName(newFreeFieldNameValue);
+            freeField.setContent(newFreeFieldContentValue);
+            // add the new free field
+            try {
+                parent.getEnvironment().addFreeField(freeField);
+            } catch (Exception e) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("freefield.exists"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // add a change event
+            parent.getChangeEvents().add("Add free field " + freeField.getName() + " / " + freeField.getContent());
+            // change the updated flag
+            parent.setUpdated(true);
+            // update the journal log tab pane
+            parent.updateJournalPane();
+            // update only the pane
+            update();
+        }
+    };
+    // delete free field
+    private ActionListener deleteFreeField = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            String freeFieldName = event.getActionCommand();
+            // looking for the free field object
+            FreeField freeField = parent.getEnvironment().getFreeField(freeFieldName);
+            if (freeField == null) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.notfound"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            parent.getEnvironment().getFreeFields().remove(freeField);
+            // add a change event
+            parent.getChangeEvents().add("Delete free field " + freeField.getName());
+            // change the updated flag
+            parent.setUpdated(true);
+            // update the journal log tab pane
+            parent.updateJournalPane();
+            // update only the pane
+            update();
+        }
+    };
+    // copy free field
+    private ActionListener copyFreeField = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // looking for the free field object
+            FreeField freeField = parent.getEnvironment().getFreeField(event.getActionCommand());
+            if (freeField == null) {
+                return;
+            }
+            try {
+                // put the free field clone in the copy component
+                KalumetConsoleApplication.getApplication().setCopyComponent(freeField.clone());
+            } catch (Exception e) {
+                return;
+            }
+        }
+    };
+    // paste free field
+    private ActionListener pasteFreeField = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the copy component is correct
+            Object copy = KalumetConsoleApplication.getApplication().getCopyComponent();
+            if (copy == null || !(copy instanceof FreeField)) {
+                return;
+            }
+            // update new field fields with the clone
+            newFreeFieldNameField.setText(((FreeField) copy).getName());
+            newFreeFieldContentField.setText(((FreeField) copy).getContent());
+        }
+    };
+    // up free field
+    private ActionListener upFreeField = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the freefield object
+            FreeField freefield = parent.getEnvironment().getFreeField(event.getActionCommand());
+            if (freefield == null) {
+                return;
+            }
+            // get the freefield index
+            int index = parent.getEnvironment().getFreeFields().indexOf(freefield);
+            // if the index is the first one, or the freefield is not found
+            // or the freefields list doesn't contain at least two elements
+            // do nothing
+            if (index == 0 || index == -1 || parent.getEnvironment().getFreeFields().size() < 2) {
+                return;
+            }
+            // get the previous freefield
+            FreeField previous = (FreeField) parent.getEnvironment().getFreeFields().get(index - 1);
+            // switch the freefields
+            parent.getEnvironment().getFreeFields().set(index, previous);
+            parent.getEnvironment().getFreeFields().set(index - 1, freefield);
+            // update the pane
+            update();
+        }
+    };
+    // down free field
+    private ActionListener downFreeField = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the freefield object
+            FreeField freefield = parent.getEnvironment().getFreeField(event.getActionCommand());
+            if (freefield == null) {
+                return;
+            }
+            // get the freefield index
+            int index = parent.getEnvironment().getFreeFields().indexOf(freefield);
+            // if the index is the last one, or the freefield is not found
+            // or the freefields list doesn't contain at least two elements
+            // do nothing
+            if (index == -1 || index == parent.getEnvironment().getFreeFields().size() - 1 || parent.getEnvironment().getFreeFields().size() < 2) {
+                return;
+            }
+            // get the next freefield
+            FreeField next = (FreeField) parent.getEnvironment().getFreeFields().get(index + 1);
+            // switch the freefields
+            parent.getEnvironment().getFreeFields().set(index + 1, freefield);
+            parent.getEnvironment().getFreeFields().set(index, next);
+            // update the pane
+            update();
+        }
+    };
+    // copy variable
+    private ActionListener copyVariable = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // looking for the variable object
+            Variable variable = parent.getEnvironment().getVariable(event.getActionCommand());
+            if (variable == null) {
+                return;
+            }
+            try {
+                // put the variable clone in the copy component
+                KalumetConsoleApplication.getApplication().setCopyComponent(variable.clone());
+            } catch (Exception e) {
+                return;
+            }
+        }
+    };
+    // paste variable
+    private ActionListener pasteVariable = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the copy component is correct
+            Object copy = KalumetConsoleApplication.getApplication().getCopyComponent();
+            if (copy == null || !(copy instanceof Variable)) {
+                return;
+            }
+            // update new variable fields with the clone
+            newVariableName.setText(((Variable) copy).getName());
+            newVariableValue.setText(((Variable) copy).getValue());
+        }
+    };
+    // edit variable
+    private ActionListener editVariable = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // edit variable
+            // get the variable name
+            String variableName = event.getActionCommand();
+            // get the variable fields
+            String newVariableNameValue = ((TextField) GeneralPane.this.getComponent("variablename_" + parent.getEnvironmentName() + "_" + variableName)).getText();
+            String newVariableValueValue = ((TextField) GeneralPane.this.getComponent("variablevalue_" + parent.getEnvironmentName() + "_" + variableName)).getText();
+            // check if the mandatory fields are presents
+            if (newVariableNameValue == null || newVariableNameValue.trim().length() < 1 || newVariableValueValue == null || newVariableValueValue.trim().length() < 1) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("variable.mandatory"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user try to change the variable name
+            if (!variableName.equals(newVariableNameValue)) {
+                // if this case, check if the variable name is already in used
+                if (parent.getEnvironment().getVariable(newVariableNameValue) != null) {
+                    KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("variable.exists"), getEnvironmentWindow().getEnvironmentName());
+                    return;
+                }
+            }
+            // get the variable object in the parent environment
+            Variable variable = parent.getEnvironment().getVariable(variableName);
+            if (variable == null) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("variable.notfound"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // add a change event
+            parent.getChangeEvents().add("Change the variable " + variable.getName() + " / " + variable.getValue());
+            // update the variable object
+            variable.setName(newVariableNameValue);
+            variable.setValue(newVariableValueValue);
+            // change the updated flag
+            parent.setUpdated(true);
+            // update the journal log tab pane
+            parent.updateJournalPane();
+            // update only the pane
+            update();
+        }
+    };
+    // delete variable
+    private ActionListener deleteVariable = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            String variableName = event.getActionCommand();
+            // looking for the variable object
+            Variable variable = parent.getEnvironment().getVariable(variableName);
+            if (variable == null) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("variable.notfound"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            parent.getEnvironment().getVariables().remove(variable);
+            // add a change event
+            parent.getChangeEvents().add("Delete variable " + variable.getName());
+            // change the updated flag
+            parent.setUpdated(true);
+            // update the journal log tab pane
+            parent.updateJournalPane();
+            // update only the pane
+            update();
+        }
+    };
+    // create variable
+    private ActionListener createVariable = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // get the variable fields value
+            String newVariableNameValue = newVariableName.getText();
+            String newVariableValueValue = newVariableValue.getText();
+            // check if the mandatory fields are presents
+            if (newVariableNameValue == null || newVariableNameValue.trim().length() < 1 || newVariableValueValue == null || newVariableValueValue.trim().length() < 1) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("variable.mandatory"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // create the new variable
+            Variable variable = new Variable();
+            variable.setName(newVariableNameValue);
+            variable.setValue(newVariableValueValue);
+            // add the new variable
+            try {
+                parent.getEnvironment().addVariable(variable);
+            } catch (Exception e) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("variable.exists"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // add a change event
+            parent.getChangeEvents().add("Add variable " + variable.getName() + " / " + variable.getValue());
+            // change the updated flag
+            parent.setUpdated(true);
+            // update the journal log tab pane
+            parent.updateJournalPane();
+            // update only the pane
+            update();
+        }
+    };
+    // up variable
+    private ActionListener upVariable = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the variable object
+            Variable variable = parent.getEnvironment().getVariable(event.getActionCommand());
+            if (variable == null) {
+                return;
+            }
+            // get the variable index
+            int index = parent.getEnvironment().getVariables().indexOf(variable);
+            // if the index is the first one, or the variable is not found
+            // or the variables list doesn't contain at least two elements
+            // do nothing
+            if (index == 0 || index == -1 || parent.getEnvironment().getVariables().size() < 2) {
+                return;
+            }
+            // get the previous variable
+            Variable previous = (Variable) parent.getEnvironment().getVariables().get(index - 1);
+            // switch the variables
+            parent.getEnvironment().getVariables().set(index, previous);
+            parent.getEnvironment().getVariables().set(index - 1, variable);
+            // update the pane
+            update();
+        }
+    };
+    // down variable
+    private ActionListener downVariable = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the variable object
+            Variable variable = parent.getEnvironment().getVariable(event.getActionCommand());
+            if (variable == null) {
+                return;
+            }
+            // get the variable index
+            int index = parent.getEnvironment().getVariables().indexOf(variable);
+            // if the index is the last one, or the variable is not found
+            // or the variables list doesn't contain at least two elements
+            // do nothing
+            if (index == -1 || index == parent.getEnvironment().getVariables().size() - 1 || parent.getEnvironment().getVariables().size() < 2) {
+                return;
+            }
+            // get the next variable
+            Variable next = (Variable) parent.getEnvironment().getVariables().get(index + 1);
+            // switch the variables
+            parent.getEnvironment().getVariables().set(index + 1, variable);
+            parent.getEnvironment().getVariables().set(index, next);
+            // update the pane
+            update();
+        }
+    };
+    // copy log file
+    private ActionListener copyLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // looking for the log file object
+            LogFile logFile = parent.getEnvironment().getLogFile(event.getActionCommand());
+            if (logFile == null) {
+                return;
+            }
+            try {
+                KalumetConsoleApplication.getApplication().setCopyComponent(logFile.clone());
+            } catch (Exception e) {
+                return;
+            }
+        }
+    };
+    // delete log file
+    private ActionListener deleteLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the log file object
+            LogFile logFile = parent.getEnvironment().getLogFile(event.getActionCommand());
+            if (logFile == null) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("logfile.notfound"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // delete the log file
+            parent.getEnvironment().getLogFiles().remove(logFile);
+            // add a journal event
+            parent.getChangeEvents().add("Delete log file " + logFile.getName());
+            // switch on the updated flag
+            parent.setUpdated(true);
+            // refresh the journal pane
+            parent.updateJournalPane();
+            // update this pane
+            update();
+        }
+    };
+    // edit log file
+    private ActionListener editLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the log file object
+            String logFileName = event.getActionCommand();
+            // get the fields value
+            String logFileNewName = ((TextField) GeneralPane.this.getComponent("logfilename_" + parent.getEnvironmentName() + "_" + logFileName)).getText();
+            String logFileNewPath = ((TextField) GeneralPane.this.getComponent("logfilepath_" + parent.getEnvironmentName() + "_" + logFileName)).getText();
+            String logFileNewAgent = (String) ((SelectField) GeneralPane.this.getComponent("logfileagent_" + parent.getEnvironmentName() + "_" + logFileName)).getSelectedItem();
+            // check the fiels value
+            if (logFileNewName == null || logFileNewName.trim().length() < 1
+                    || logFileNewPath == null || logFileNewPath.trim().length() < 1) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("logfile.mandatory"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // if the user tries to change the log file name, check if the name is not already used
+            if (!logFileNewName.equals(logFileName)) {
+                if (parent.getEnvironment().getLogFile(logFileNewName) != null) {
+                    KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("logfile.exists"), getEnvironmentWindow().getEnvironmentName());
+                    return;
+                }
+            }
+            // looking for the log file object
+            LogFile logFile = parent.getEnvironment().getLogFile(logFileName);
+            if (logFile == null) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("logfile.notfound"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // add a change event
+            parent.getChangeEvents().add("Change log file " + logFile.getName());
+            // update the log file object
+            logFile.setName(logFileNewName);
+            logFile.setPath(logFileNewPath);
+            logFile.setAgent(logFileNewAgent);
+            // switch on the update flag
+            parent.setUpdated(true);
+            // update the journal log pane
+            parent.updateJournalPane();
+            // update this pane
+            update();
+        }
+    };
+    // add log file
+    private ActionListener addLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the environment lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // get the provided value
+            String newLogFileNameValue = newLogFileName.getText();
+            String newLogFilePathValue = newLogFilePath.getText();
+            String newLogFileAgentValue = (String) newLogFileAgent.getSelectedItem();
+            // check the provided value
+            if (newLogFileNameValue == null || newLogFileNameValue.trim().length() < 1
+                    || newLogFilePathValue == null || newLogFilePathValue.trim().length() < 1) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("logfile.mandatory"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // create a new log file
+            LogFile logFile = new LogFile();
+            logFile.setName(newLogFileNameValue);
+            logFile.setPath(newLogFilePathValue);
+            logFile.setAgent(newLogFileAgentValue);
+            // add the new log file
+            try {
+                parent.getEnvironment().addLogFile(logFile);
+            } catch (Exception e) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("logfile.exists"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // add a change event
+            parent.getChangeEvents().add("Add log file " + logFile.getName() + " / " + logFile.getPath());
+            // switch on the update flag
+            parent.setUpdated(true);
+            // update the journal log pane
+            parent.updateJournalPane();
+            // update this pane
+            update();
+        }
+    };
+    // paste log file
+    private ActionListener pasteLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the copied object is correct
+            Object copy = KalumetConsoleApplication.getApplication().getCopyComponent();
+            if (copy == null || !(copy instanceof LogFile)) {
+                return;
+            }
+            // update the new fields
+            newLogFileName.setText(((LogFile) copy).getName());
+            newLogFilePath.setText(((LogFile) copy).getPath());
+            newLogFileAgent.setSelectedItem(((LogFile) copy).getAgent());
+        }
+    };
+    // up log file
+    private ActionListener upLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the logfile object
+            LogFile logFile = getEnvironmentWindow().getEnvironment().getLogFile(event.getActionCommand());
+            if (logFile == null) {
+                return;
+            }
+            // get the logfile index
+            int index = getEnvironmentWindow().getEnvironment().getLogFiles().indexOf(logFile);
+            // if the index is the first one, or the log file is not found
+            // or the logfiles list doesn't contain at least two elements
+            // do nothing
+            if (index == 0 || index == -1 || getEnvironmentWindow().getEnvironment().getLogFiles().size() < 2) {
+                return;
+            }
+            // get the previous logfile
+            LogFile previous = (LogFile) getEnvironmentWindow().getEnvironment().getLogFiles().get(index - 1);
+            // switch the logfiles
+            getEnvironmentWindow().getEnvironment().getLogFiles().set(index - 1, logFile);
+            getEnvironmentWindow().getEnvironment().getLogFiles().set(index, previous);
+            // update the pane
+            update();
+        }
+    };
+    // down log file
+    private ActionListener downLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // check if the user has the lock
+            if (!getEnvironmentWindow().getEnvironment().getLock().equals(KalumetConsoleApplication.getApplication().getUserid())) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("environment.locked"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // check if the user can do it
+            if (!getEnvironmentWindow().adminPermission) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("action.restricted"), getEnvironmentWindow().getEnvironmentName());
+                return;
+            }
+            // looking for the logfile object
+            LogFile logFile = getEnvironmentWindow().getEnvironment().getLogFile(event.getActionCommand());
+            if (logFile == null) {
+                return;
+            }
+            // get the logfile index
+            int index = getEnvironmentWindow().getEnvironment().getLogFiles().indexOf(logFile);
+            // if the index is the last one, or the logfile is not found
+            // or the logfiles list doesn't contain at least two elements
+            // do nothing
+            if (index == -1 || index == getEnvironmentWindow().getEnvironment().getLogFiles().size() - 1 || getEnvironmentWindow().getEnvironment().getLogFiles().size() < 2) {
+                return;
+            }
+            // get the next logfile
+            LogFile next = (LogFile) getEnvironmentWindow().getEnvironment().getLogFiles().get(index + 1);
+            // switch the logfiles
+            getEnvironmentWindow().getEnvironment().getLogFiles().set(index + 1, logFile);
+            getEnvironmentWindow().getEnvironment().getLogFiles().set(index, next);
+            // update the pane
+            update();
+        }
+    };
+    // agent status
+    private ActionListener agentStatus = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // add an event
+            KalumetConsoleApplication.getApplication().getLogPane().addInfo("Agent check in progress ...", parent.getEnvironmentName());
+            // start the agent status thread
+            final AgentStatusThread agentStatusThread = new AgentStatusThread();
+            agentStatusThread.start();
+            // sync with the client
+            KalumetConsoleApplication.getApplication().enqueueTask(KalumetConsoleApplication.getApplication().getTaskQueue(), new Runnable() {
+                public void run() {
+                    if (agentStatusThread.ended) {
+                        if (agentStatusThread.failure) {
+                            KalumetConsoleApplication.getApplication().getLogPane().addError(agentStatusThread.message, parent.getEnvironmentName());
+                        } else {
+                            KalumetConsoleApplication.getApplication().getLogPane().addConfirm(agentStatusThread.message, parent.getEnvironmentName());
+                        }
+                    } else {
+                        KalumetConsoleApplication.getApplication().enqueueTask(KalumetConsoleApplication.getApplication().getTaskQueue(), this);
+                    }
+                }
+            });
+        }
+    };
+    // view log file
+    private ActionListener viewLogFile = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            String logFileName = event.getActionCommand();
+            // looking for the log file
+            LogFile logFile = parent.getEnvironment().getLogFile(logFileName);
+            if (logFile == null) {
+                KalumetConsoleApplication.getApplication().getLogPane().addError(Messages.getString("logfile.notfound"), parent.getEnvironmentName());
+                return;
+            }
+            // define which agent to use
+            String agentId;
+            if (logFile.getAgent() != null && logFile.getAgent().trim().length() > 0) {
+                agentId = logFile.getAgent();
+            } else {
+                agentId = parent.getEnvironment().getAgent();
+            }
+            // open a view file window
+            KalumetConsoleApplication.getApplication().getDefaultWindow().getContent().add(new ViewFileWindow(logFile.getPath(), agentId));
+        }
+    };
+
+    /**
+     * Create a new <code>GeneralPane</code>.
+     *
+     * @param parent the parent <code>EnvironmentWindow</code>.
+     */
+    public GeneralPane(EnvironmentWindow parent) {
+        super();
+        setStyleName("default");
+
+        // update parent
+        this.parent = parent;
+
+        // add the information tab pane
+        TabPaneLayoutData tabLayoutData = new TabPaneLayoutData();
+        tabLayoutData.setTitle(Messages.getString("information"));
+        ContentPane informationPane = new ContentPane();
+        informationPane.setStyleName("tab.content");
+        informationPane.setLayoutData(tabLayoutData);
+        add(informationPane);
+
+        // info grid
+        Grid grid = new Grid(2);
+        grid.setStyleName("default");
+        grid.setWidth(new Extent(100, Extent.PERCENT));
+        grid.setColumnWidth(0, new Extent(10, Extent.PERCENT));
+        grid.setColumnWidth(1, new Extent(90, Extent.PERCENT));
+        informationPane.add(grid);
+
+        // add environment name field
+        Label nameLabel = new Label(Messages.getString("name"));
+        nameLabel.setStyleName("grid.cell");
+        grid.add(nameLabel);
+        nameField = new TextField();
+        nameField.setStyleName("default");
+        nameField.setWidth(new Extent(100, Extent.PERCENT));
+        grid.add(nameField);
+
+        // add environment group field
+        Label groupLabel = new Label(Messages.getString("group"));
+        groupLabel.setStyleName("grid.cell");
+        grid.add(groupLabel);
+        groupField = new TextField();
+        groupField.setStyleName("default");
+        groupField.setWidth(new Extent(100, Extent.PERCENT));
+        grid.add(groupField);
+
+        // add the tag select field
+        Label tagLabel = new Label(Messages.getString("tag"));
+        tagLabel.setStyleName("grid.cell");
+        grid.add(tagLabel);
+        Object[] tags = new Object[]{Messages.getString("production"),
+                Messages.getString("preproduction"),
+                Messages.getString("staging"),
+                Messages.getString("testing"),
+                Messages.getString("unstable"),
+                Messages.getString("other")
+        };
+        tagField = new SelectField(tags);
+        tagField.setStyleName("default");
+        tagField.setWidth(new Extent(50, Extent.EX));
+        grid.add(tagField);
+
+        // add the agent select field
+        Label agentLabel = new Label(Messages.getString("agent"));
+        agentLabel.setStyleName("grid.cell");
+        grid.add(agentLabel);
+        Row agentRow = new Row();
+        agentRow.setCellSpacing(new Extent(2));
+        grid.add(agentRow);
+        agentField = new SelectField();
+        agentField.setStyleName("default");
+        agentField.setWidth(new Extent(50, Extent.EX));
+        agentRow.add(agentField);
+        Button agentButton = new Button(Styles.INFORMATION);
+        agentButton.setToolTipText(Messages.getString("status"));
+        agentButton.addActionListener(agentStatus);
+        agentRow.add(agentButton);
+
+        // add the auto update select field
+        Label autoUpdateLabel = new Label(Messages.getString("autoupdate"));
+        autoUpdateLabel.setStyleName("grid.cell");
+        grid.add(autoUpdateLabel);
+        autoUpdateField = new SelectField(MainScreen.LABELS);
+        autoUpdateField.setStyleName("default");
+        autoUpdateField.setWidth(new Extent(10, Extent.EX));
+        grid.add(autoUpdateField);
+
+        // add the notes area
+        Label environmentNotesLabel = new Label(Messages.getString("notes"));
+        environmentNotesLabel.setStyleName("grid.cell");
+        grid.add(environmentNotesLabel);
+        notesArea = new TextArea();
+        notesArea.setStyleName("default");
+        notesArea.setWidth(new Extent(100, Extent.PERCENT));
+        notesArea.setHeight(new Extent(200, Extent.PX));
+        grid.add(notesArea);
+
+        // add the weblinks area
+        Label environmentWeblinksLabel = new Label(Messages.getString("weblinks"));
+        environmentWeblinksLabel.setStyleName("grid.cell");
+        grid.add(environmentWeblinksLabel);
+        weblinksArea = new TextArea();
+        weblinksArea.setStyleName("default");
+        weblinksArea.setWidth(new Extent(100, Extent.PERCENT));
+        weblinksArea.setHeight(new Extent(200, Extent.PX));
+        grid.add(weblinksArea);
+
+        // free fields tab
+        tabLayoutData = new TabPaneLayoutData();
+        tabLayoutData.setTitle(Messages.getString("freefields"));
+        ContentPane freeFieldPane = new ContentPane();
+        freeFieldPane.setStyleName("tab.content");
+        freeFieldPane.setLayoutData(tabLayoutData);
+        add(freeFieldPane);
+
+        // free fields grid
+        freeFieldsGrid = new Grid(3);
+        freeFieldsGrid.setStyleName("border.grid");
+        freeFieldsGrid.setColumnWidth(0, new Extent(50, Extent.PX));
+        freeFieldsGrid.setColumnWidth(1, new Extent(50, Extent.PERCENT));
+        freeFieldsGrid.setColumnWidth(2, new Extent(50, Extent.PERCENT));
+        freeFieldPane.add(freeFieldsGrid);
+
+        // add the variable tab
+        tabLayoutData = new TabPaneLayoutData();
+        tabLayoutData.setTitle(Messages.getString("variables"));
+        ContentPane variablePane = new ContentPane();
+        variablePane.setStyleName("tab.content");
+        variablePane.setLayoutData(tabLayoutData);
+        add(variablePane);
+
+        variablesGrid = new Grid(3);
+        variablesGrid.setStyleName("border.grid");
+        variablesGrid.setColumnWidth(0, new Extent(50, Extent.PX));
+        variablesGrid.setColumnWidth(1, new Extent(50, Extent.PERCENT));
+        variablesGrid.setColumnWidth(2, new Extent(50, Extent.PERCENT));
+        variablePane.add(variablesGrid);
+
+        // add the log files tab
+        tabLayoutData = new TabPaneLayoutData();
+        tabLayoutData.setTitle(Messages.getString("logfiles"));
+        ContentPane logFilePane = new ContentPane();
+        logFilePane.setStyleName("tab.content");
+        logFilePane.setLayoutData(tabLayoutData);
+        add(logFilePane);
+
+        logFilesGrid = new Grid(4);
+        logFilesGrid.setStyleName("border.grid");
+        logFilesGrid.setColumnWidth(0, new Extent(50, Extent.PX));
+        logFilesGrid.setColumnWidth(1, new Extent(33, Extent.PERCENT));
+        logFilesGrid.setColumnWidth(2, new Extent(33, Extent.PERCENT));
+        logFilesGrid.setColumnWidth(3, new Extent(33, Extent.PERCENT));
+        logFilePane.add(logFilesGrid);
+
+        // update field
+        update();
+    }
+
+    /**
+     * Update fields/grids
+     */
+    protected void update() {
+        // set environment name
+        nameField.setText(parent.getEnvironment().getName());
+        // set environment group
+        groupField.setText(parent.getEnvironment().getGroup());
+        // load Kalumet configuration
+        Kalumet kalumet = null;
+        try {
+            kalumet = ConfigurationManager.loadStore();
+        } catch (Exception e) {
+            KalumetConsoleApplication.getApplication().getLogPane().addError(Messages.getString("db.read") + ": " + e.getMessage());
+            return;
+        }
+        // select field model
+        DefaultListModel agentModelList = (DefaultListModel) agentField.getModel();
+        agentModelList.removeAll();
+        agentModelList.add("");
+        for (Iterator agentIterator = kalumet.getAgents().iterator(); agentIterator.hasNext(); ) {
+            Agent agent = (Agent) agentIterator.next();
+            agentModelList.add(agent.getId());
+        }
+        agentField.setSelectedItem(parent.getEnvironment().getAgent());
+        // tag
+        if (parent.getEnvironment().getTag() == null) {
+            tagField.setSelectedIndex(5);
+        } else {
+            if (parent.getEnvironment().getTag().equals(Messages.getString("production"))) {
+                tagField.setSelectedIndex(0);
+            } else if (parent.getEnvironment().getTag().equals(Messages.getString("preproduction"))) {
+                tagField.setSelectedIndex(1);
+            } else if (parent.getEnvironment().getTag().equals(Messages.getString("staging"))) {
+                tagField.setSelectedIndex(2);
+            } else if (parent.getEnvironment().getTag().equals(Messages.getString("testing"))) {
+                tagField.setSelectedIndex(3);
+            } else if (parent.getEnvironment().getTag().equals(Messages.getString("unstable"))) {
+                tagField.setSelectedIndex(4);
+            } else {
+                tagField.setSelectedIndex(5);
+            }
+        }
+        // auto update flag
+        if (parent.getEnvironment().isAutoupdate()) {
+            autoUpdateField.setSelectedIndex(0);
+        } else {
+            autoUpdateField.setSelectedIndex(1);
+        }
+        // update the environment notes area
+        notesArea.setText(parent.getEnvironment().getNotes());
+        // update the environment weblinks area
+        weblinksArea.setText(parent.getEnvironment().getWeblinks());
+
+        // update the free fields grid
+        // remove all grid children
+        freeFieldsGrid.removeAll();
+        // add grid headers
+        Label freeFieldActionsHeader = new Label(" ");
+        freeFieldActionsHeader.setStyleName("grid.header");
+        freeFieldsGrid.add(freeFieldActionsHeader);
+        Label freeFieldNameHeader = new Label(Messages.getString("name"));
+        freeFieldNameHeader.setStyleName("grid.header");
+        freeFieldsGrid.add(freeFieldNameHeader);
+        Label freeFieldsContentHeader = new Label(Messages.getString("content"));
+        freeFieldsContentHeader.setStyleName("grid.header");
+        freeFieldsGrid.add(freeFieldsContentHeader);
+        // add free fields
+        for (Iterator freeFieldIterator = parent.getEnvironment().getFreeFields().iterator(); freeFieldIterator.hasNext(); ) {
+            FreeField current = (FreeField) freeFieldIterator.next();
+            // row
+            Row row = new Row();
+            row.setInsets(new Insets(2));
+            row.setCellSpacing(new Extent(2));
+            freeFieldsGrid.add(row);
+            // free field copy
+            Button copyButton = new Button(Styles.PAGE_COPY);
+            copyButton.setToolTipText(Messages.getString("copy"));
+            copyButton.setActionCommand(current.getName());
+            copyButton.addActionListener(copyFreeField);
+            row.add(copyButton);
+            if (getEnvironmentWindow().adminPermission) {
+                // up
+                Button upButton = new Button(Styles.ARROW_UP);
+                upButton.setToolTipText(Messages.getString("up"));
+                upButton.setActionCommand(current.getName());
+                upButton.addActionListener(upFreeField);
+                row.add(upButton);
+                // down
+                Button downButton = new Button(Styles.ARROW_DOWN);
+                downButton.setToolTipText(Messages.getString("down"));
+                downButton.setActionCommand(current.getName());
+                downButton.addActionListener(downFreeField);
+                row.add(downButton);
+                // edit
+                Button editButton = new Button(Styles.ACCEPT);
+                editButton.setToolTipText(Messages.getString("apply"));
+                editButton.setActionCommand(current.getName());
+                editButton.addActionListener(editFreeField);
+                row.add(editButton);
+                // delete
+                Button deleteButton = new Button(Styles.DELETE);
+                deleteButton.setToolTipText(Messages.getString("delete"));
+                deleteButton.setActionCommand(current.getName());
+                deleteButton.addActionListener(deleteFreeField);
+                row.add(deleteButton);
+            }
+            // free field name
+            TextField freeFieldName = new TextField();
+            freeFieldName.setStyleName("default");
+            freeFieldName.setWidth(new Extent(100, Extent.PERCENT));
+            freeFieldName.setText(current.getName());
+            freeFieldName.setId("ffname_" + parent.getEnvironment().getName() + "_" + current.getName());
+            freeFieldsGrid.add(freeFieldName);
+            // free field content
+            TextField freeFieldContent = new TextField();
+            freeFieldContent.setStyleName("default");
+            freeFieldContent.setWidth(new Extent(100, Extent.PERCENT));
+            freeFieldContent.setText(current.getContent());
+            freeFieldContent.setId("ffcontent_" + parent.getEnvironment().getName() + "_" + current.getName());
+            freeFieldsGrid.add(freeFieldContent);
+        }
+        // add blank free field to add
+        if (getEnvironmentWindow().adminPermission) {
+            Row row = new Row();
+            row.setInsets(new Insets(2));
+            row.setCellSpacing(new Extent(2));
+            freeFieldsGrid.add(row);
+            // paste
+            Button pasteButton = new Button(Styles.PAGE_PASTE);
+            pasteButton.setToolTipText(Messages.getString("paste"));
+            pasteButton.addActionListener(pasteFreeField);
+            row.add(pasteButton);
+            // add
+            Button addButton = new Button(Styles.ADD);
+            addButton.addActionListener(createFreeField);
+            row.add(addButton);
+            // new name field
+            newFreeFieldNameField = new TextField();
+            newFreeFieldNameField.setStyleName("default");
+            newFreeFieldNameField.setWidth(new Extent(100, Extent.PERCENT));
+            freeFieldsGrid.add(newFreeFieldNameField);
+            // new content field
+            newFreeFieldContentField = new TextField();
+            newFreeFieldContentField.setStyleName("default");
+            newFreeFieldContentField.setWidth(new Extent(100, Extent.PERCENT));
+            freeFieldsGrid.add(newFreeFieldContentField);
+        }
+
+        // update the variables grid
+        // remove all grid children
+        variablesGrid.removeAll();
+        // add grid headers
+        Label variableActionsHeader = new Label(" ");
+        variableActionsHeader.setStyleName("grid.header");
+        variablesGrid.add(variableActionsHeader);
+        Label variableNameHeader = new Label(Messages.getString("name"));
+        variableNameHeader.setStyleName("grid.header");
+        variablesGrid.add(variableNameHeader);
+        Label variableValueHeader = new Label(Messages.getString("value"));
+        variableValueHeader.setStyleName("grid.header");
+        variablesGrid.add(variableValueHeader);
+        // add variables fields
+        for (Iterator variableIterator = parent.getEnvironment().getVariables().iterator(); variableIterator.hasNext(); ) {
+            Variable current = (Variable) variableIterator.next();
+            // row
+            Row row = new Row();
+            row.setInsets(new Insets(2));
+            row.setCellSpacing(new Extent(2));
+            variablesGrid.add(row);
+            // copy
+            Button copyButton = new Button(Styles.PAGE_COPY);
+            copyButton.setToolTipText(Messages.getString("copy"));
+            copyButton.setActionCommand(current.getName());
+            copyButton.addActionListener(copyVariable);
+            row.add(copyButton);
+            if (getEnvironmentWindow().adminPermission) {
+                // up
+                Button upButton = new Button(Styles.ARROW_UP);
+                upButton.setToolTipText(Messages.getString("up"));
+                upButton.setActionCommand(current.getName());
+                upButton.addActionListener(upVariable);
+                row.add(upButton);
+                // down
+                Button downButton = new Button(Styles.ARROW_DOWN);
+                downButton.setToolTipText(Messages.getString("down"));
+                downButton.setActionCommand(current.getName());
+                downButton.addActionListener(downVariable);
+                row.add(downButton);
+                // edit
+                Button editButton = new Button(Styles.ACCEPT);
+                editButton.setToolTipText(Messages.getString("apply"));
+                editButton.setActionCommand(current.getName());
+                editButton.addActionListener(editVariable);
+                row.add(editButton);
+                // delete
+                Button deleteButton = new Button(Styles.DELETE);
+                deleteButton.setToolTipText(Messages.getString("delete"));
+                deleteButton.setActionCommand(current.getName());
+                deleteButton.addActionListener(deleteVariable);
+                row.add(deleteButton);
+            }
+            // variable name
+            TextField variableName = new TextField();
+            variableName.setStyleName("default");
+            variableName.setWidth(new Extent(100, Extent.PERCENT));
+            variableName.setText(current.getName());
+            variableName.setId("variablename_" + parent.getEnvironment().getName() + "_" + current.getName());
+            variablesGrid.add(variableName);
+            // variable value
+            TextField variableContent = new TextField();
+            variableContent.setStyleName("default");
+            variableContent.setWidth(new Extent(100, Extent.PERCENT));
+            variableContent.setText(current.getValue());
+            variableContent.setId("variablevalue_" + parent.getEnvironment().getName() + "_" + current.getName());
+            variablesGrid.add(variableContent);
+        }
+        // add blank variable to add
+        if (getEnvironmentWindow().adminPermission) {
+            Row row = new Row();
+            row.setInsets(new Insets(2));
+            row.setCellSpacing(new Extent(2));
+            variablesGrid.add(row);
+            // paste
+            Button pasteButton = new Button(Styles.PAGE_PASTE);
+            pasteButton.setToolTipText(Messages.getString("paste"));
+            pasteButton.addActionListener(pasteVariable);
+            row.add(pasteButton);
+            // add
+            Button addButton = new Button(Styles.ADD);
+            addButton.setToolTipText(Messages.getString("add"));
+            addButton.addActionListener(createVariable);
+            row.add(addButton);
+            // new name
+            newVariableName = new TextField();
+            newVariableName.setStyleName("default");
+            newVariableName.setWidth(new Extent(100, Extent.PERCENT));
+            variablesGrid.add(newVariableName);
+            // new value 
+            newVariableValue = new TextField();
+            newVariableValue.setStyleName("default");
+            newVariableValue.setWidth(new Extent(100, Extent.PERCENT));
+            variablesGrid.add(newVariableValue);
+        }
+
+        // update the log files grid
+        logFilesGrid.removeAll();
+        // add headers
+        Label logFilesActionsHeader = new Label(" ");
+        logFilesActionsHeader.setStyleName("grid.header");
+        logFilesGrid.add(logFilesActionsHeader);
+        Label logFilesNameHeader = new Label(Messages.getString("name"));
+        logFilesNameHeader.setStyleName("grid.header");
+        logFilesGrid.add(logFilesNameHeader);
+        Label logFilesPathHeader = new Label(Messages.getString("path"));
+        logFilesPathHeader.setStyleName("grid.header");
+        logFilesGrid.add(logFilesPathHeader);
+        Label logFilesAgentHeader = new Label(Messages.getString("agent"));
+        logFilesAgentHeader.setStyleName("grid.header");
+        logFilesGrid.add(logFilesAgentHeader);
+        // log files fields
+        for (Iterator logFileIterator = parent.getEnvironment().getLogFiles().iterator(); logFileIterator.hasNext(); ) {
+            LogFile logFile = (LogFile) logFileIterator.next();
+            // action row
+            Row row = new Row();
+            row.setInsets(new Insets(2));
+            row.setCellSpacing(new Extent(2));
+            logFilesGrid.add(row);
+            // copy button
+            Button copyButton = new Button(Styles.PAGE_COPY);
+            copyButton.setToolTipText(Messages.getString("copy"));
+            copyButton.setActionCommand(logFile.getName());
+            copyButton.addActionListener(copyLogFile);
+            row.add(copyButton);
+            // view button
+            Button viewButton = new Button(Styles.INFORMATION);
+            viewButton.setToolTipText(Messages.getString("view"));
+            viewButton.setActionCommand(logFile.getName());
+            viewButton.addActionListener(viewLogFile);
+            row.add(viewButton);
+            if (getEnvironmentWindow().adminPermission) {
+                // up button
+                Button upButton = new Button(Styles.ARROW_UP);
+                upButton.setToolTipText(Messages.getString("up"));
+                upButton.setActionCommand(logFile.getName());
+                upButton.addActionListener(upLogFile);
+                row.add(upButton);
+                // down button
+                Button downButton = new Button(Styles.ARROW_DOWN);
+                downButton.setToolTipText(Messages.getString("down"));
+                downButton.setActionCommand(logFile.getName());
+                downButton.addActionListener(downLogFile);
+                row.add(downButton);
+                // edit button
+                Button editButton = new Button(Styles.ACCEPT);
+                editButton.setToolTipText(Messages.getString("apply"));
+                editButton.setActionCommand(logFile.getName());
+                editButton.addActionListener(editLogFile);
+                row.add(editButton);
+                // delete button
+                Button deleteButton = new Button(Styles.DELETE);
+                deleteButton.setToolTipText(Messages.getString("delete"));
+                deleteButton.setActionCommand(logFile.getName());
+                deleteButton.addActionListener(deleteLogFile);
+                row.add(deleteButton);
+            }
+            // add the log file name field
+            TextField logFileNameField = new TextField();
+            logFileNameField.setStyleName("default");
+            logFileNameField.setWidth(new Extent(100, Extent.PERCENT));
+            logFileNameField.setId("logfilename_" + parent.getEnvironmentName() + "_" + logFile.getName());
+            logFileNameField.setText(logFile.getName());
+            logFilesGrid.add(logFileNameField);
+            // add the log file path field
+            TextField logFilePathField = new TextField();
+            logFilePathField.setStyleName("default");
+            logFilePathField.setWidth(new Extent(100, Extent.PERCENT));
+            logFilePathField.setId("logfilepath_" + parent.getEnvironmentName() + "_" + logFile.getName());
+            logFilePathField.setText(logFile.getPath());
+            logFilesGrid.add(logFilePathField);
+            // add the log file agent field
+            SelectField logFileAgentField = new SelectField();
+            logFileAgentField.setStyleName("default");
+            logFileAgentField.setWidth(new Extent(100, Extent.PERCENT));
+            logFileAgentField.setId("logfileagent_" + parent.getEnvironmentName() + "_" + logFile.getName());
+            logFilesGrid.add(logFileAgentField);
+            // populate the agent field
+            DefaultListModel logFileAgentListModel = (DefaultListModel) logFileAgentField.getModel();
+            logFileAgentListModel.removeAll();
+            // add the blank agent
+            logFileAgentListModel.add("");
+            // add the agents
+            for (Iterator agentIterator = kalumet.getAgents().iterator(); agentIterator.hasNext(); ) {
+                Agent agent = (Agent) agentIterator.next();
+                logFileAgentListModel.add(agent.getId());
+            }
+            // select the correct item
+            logFileAgentField.setSelectedItem(logFile.getAgent());
+        }
+        if (getEnvironmentWindow().adminPermission) {
+            // action row
+            Row row = new Row();
+            row.setInsets(new Insets(2));
+            row.setCellSpacing(new Extent(2));
+            logFilesGrid.add(row);
+            // paste button
+            Button pasteButton = new Button(Styles.PAGE_PASTE);
+            pasteButton.setToolTipText(Messages.getString("paste"));
+            pasteButton.addActionListener(pasteLogFile);
+            row.add(pasteButton);
+            // add button
+            Button addButton = new Button(Styles.ADD);
+            addButton.setToolTipText(Messages.getString("add"));
+            addButton.addActionListener(addLogFile);
+            row.add(addButton);
+            // add the new log file name field
+            newLogFileName = new TextField();
+            newLogFileName.setStyleName("default");
+            newLogFileName.setWidth(new Extent(100, Extent.PERCENT));
+            logFilesGrid.add(newLogFileName);
+            // add the new log file path field
+            newLogFilePath = new TextField();
+            newLogFilePath.setStyleName("default");
+            newLogFilePath.setWidth(new Extent(100, Extent.PERCENT));
+            logFilesGrid.add(newLogFilePath);
+            // add the new agents fields
+            newLogFileAgent = new SelectField();
+            newLogFileAgent.setStyleName("default");
+            newLogFileAgent.setWidth(new Extent(100, Extent.PERCENT));
+            logFilesGrid.add(newLogFileAgent);
+            DefaultListModel newLogFileAgentModel = (DefaultListModel) newLogFileAgent.getModel();
+            newLogFileAgentModel.removeAll();
+            newLogFileAgentModel.add(" ");
+            for (Iterator agentIterator = kalumet.getAgents().iterator(); agentIterator.hasNext(); ) {
+                Agent agent = (Agent) agentIterator.next();
+                newLogFileAgentModel.add(agent.getId());
+            }
+            newLogFileAgent.setSelectedIndex(0);
+        }
+    }
+
+    public TextField getNameField() {
+        return this.nameField;
+    }
+
+    public TextField getGroupField() {
+        return this.groupField;
+    }
+
+    public SelectField getTagField() {
+        return this.tagField;
+    }
+
+    public SelectField getAgentField() {
+        return this.agentField;
+    }
+
+    public SelectField getAutoUpdateField() {
+        return this.autoUpdateField;
+    }
+
+    public TextArea getNotesArea() {
+        return this.notesArea;
+    }
+
+    public TextArea getWeblinksArea() {
+        return this.weblinksArea;
+    }
+
+    public EnvironmentWindow getEnvironmentWindow() {
+        return parent;
+    }
+
+}
\ No newline at end of file

Added: incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/HomePageWindow.java
URL: http://svn.apache.org/viewvc/incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/HomePageWindow.java?rev=1205585&view=auto
==============================================================================
--- incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/HomePageWindow.java (added)
+++ incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/HomePageWindow.java Wed Nov 23 20:52:16 2011
@@ -0,0 +1,211 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console.app;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Iterator;
+
+import nextapp.echo2.app.Button;
+import nextapp.echo2.app.Extent;
+import nextapp.echo2.app.Insets;
+import nextapp.echo2.app.Label;
+import nextapp.echo2.app.Row;
+import nextapp.echo2.app.SplitPane;
+import nextapp.echo2.app.TextArea;
+import nextapp.echo2.app.TextField;
+import nextapp.echo2.app.WindowPane;
+import nextapp.echo2.app.event.ActionEvent;
+import nextapp.echo2.app.event.ActionListener;
+import org.apache.kalumet.FileManipulator;
+import org.apache.kalumet.model.Archive;
+import org.apache.kalumet.model.J2EEApplication;
+import org.apache.kalumet.model.J2EEApplicationServer;
+
+/**
+ * Environment home page window.
+ */
+public class HomePageWindow extends WindowPane {
+
+    private static final String TEMPLATE_LOCATION = "/org/apache/kalumet/console/app/resources/templates/environment-homepage.html";
+
+    private EnvironmentWindow parent;
+    private TextArea area;
+    private TextField locationField;
+
+    // refresh
+    private ActionListener refresh = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            HomePageWindow.this.update();
+        }
+    };
+    // close
+    private ActionListener close = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            HomePageWindow.this.userClose();
+        }
+    };
+    // copy
+    private ActionListener copy = new ActionListener() {
+        public void actionPerformed(ActionEvent event) {
+            // get the home page location
+            String homePageLocation = locationField.getText();
+            if (homePageLocation == null || homePageLocation.trim().length() < 1) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("homepage.warn.mandatory"));
+                return;
+            }
+            try {
+                // init a file manipulator
+                FileManipulator fileManipulator = FileManipulator.getInstance();
+                // write the homepage area in the output stream
+                PrintWriter writer = new PrintWriter(fileManipulator.write(homePageLocation));
+                writer.print(area.getText());
+                writer.flush();
+                writer.close();
+            } catch (Exception e) {
+                KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("homepage.warn.error") + ": " + e.getMessage());
+                return;
+            }
+            KalumetConsoleApplication.getApplication().getLogPane().addConfirm(Messages.getString("homepage.generated"));
+        }
+    };
+
+    /**
+     * Create environment home page window.
+     *
+     * @param parent the parent <code>EnvironmentWindow</code>.
+     */
+    public HomePageWindow(EnvironmentWindow parent) {
+        super();
+
+        // update parent
+        this.parent = parent;
+
+        setTitle(parent.getEnvironmentName() + " " + Messages.getString("homepage"));
+        setId("homepagewindow_" + parent.getEnvironmentName());
+        setStyleName("default");
+        setWidth(new Extent(800, Extent.PX));
+        setHeight(new Extent(600, Extent.PX));
+        setModal(false);
+        setDefaultCloseOperation(WindowPane.DISPOSE_ON_CLOSE);
+
+        // create a split pane for the control button
+        SplitPane splitPane = new SplitPane(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP, new Extent(32));
+        add(splitPane);
+
+        // add the control pane
+        Row controlRow = new Row();
+        controlRow.setStyleName("control");
+        splitPane.add(controlRow);
+        // add the refresh button
+        Button refreshButton = new Button(Messages.getString("reload"), Styles.DATABASE_REFRESH);
+        refreshButton.setStyleName("control");
+        refreshButton.addActionListener(refresh);
+        controlRow.add(refreshButton);
+        // add the close button
+        Button closeButton = new Button(Messages.getString("close"), Styles.CROSS);
+        closeButton.setStyleName("control");
+        closeButton.addActionListener(close);
+        controlRow.add(closeButton);
+
+        // add split pane content
+        SplitPane content = new SplitPane(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP, new Extent(20));
+        splitPane.add(content);
+
+        // add the row location
+        Row locationRow = new Row();
+        locationRow.setInsets(new Insets(2));
+        locationRow.setCellSpacing(new Extent(2));
+        content.add(locationRow);
+        // add the copy location label
+        Label copyLocationLabel = new Label(Messages.getString("location"));
+        copyLocationLabel.setStyleName("default");
+        locationRow.add(copyLocationLabel);
+        // add the environment homepage location field
+        locationField = new TextField();
+        locationField.setStyleName("default");
+        locationField.addActionListener(copy);
+        locationRow.add(locationField);
+        // add the copy button
+        Button copyButton = new Button(Messages.getString("copy"), Styles.ACCEPT);
+        copyButton.addActionListener(copy);
+        locationRow.add(copyButton);
+
+        // add the text area
+        area = new TextArea();
+        area.setStyleName("default");
+        area.setWidth(new Extent(98, Extent.PERCENT));
+        area.setHeight(new Extent(98, Extent.PERCENT));
+        content.add(area);
+
+        // update the pane
+        update();
+    }
+
+    /**
+     * Update the pane.
+     */
+    protected void update() {
+        // generate replace strings
+        String applications = null;
+        for (Iterator applicationServerIterator = parent.getEnvironment().getJ2EEApplicationServers().getJ2EEApplicationServers().iterator(); applicationServerIterator.hasNext(); ) {
+            J2EEApplicationServer applicationServer = (J2EEApplicationServer) applicationServerIterator.next();
+            for (Iterator applicationIterator = applicationServer.getJ2EEApplications().iterator(); applicationIterator.hasNext(); ) {
+                J2EEApplication application = (J2EEApplication) applicationIterator.next();
+                for (Iterator archiveIterator = application.getArchives().iterator(); archiveIterator.hasNext(); ) {
+                    Archive archive = (Archive) archiveIterator.next();
+                    applications = applications + "&nbsp; &nbsp; <a href=\"" + archive.getContext() + "\">" + archive.getName() + "</a>";
+                }
+            }
+        }
+        // change the values in the template
+        BufferedReader templateBufferedReader = new BufferedReader(new InputStreamReader(HomePageWindow.class.getResourceAsStream(HomePageWindow.TEMPLATE_LOCATION)));
+        StringWriter writer = new StringWriter();
+        BufferedWriter buffer = new BufferedWriter(writer);
+        try {
+            String templateLine = templateBufferedReader.readLine();
+            while (templateLine != null) {
+                buffer.write(templateLine);
+                buffer.newLine();
+                templateLine = templateBufferedReader.readLine();
+            }
+            buffer.flush();
+        } catch (Exception e) {
+            KalumetConsoleApplication.getApplication().getLogPane().addWarning(Messages.getString("homepage.error") + ": " + e.getMessage());
+            return;
+        }
+        String template = writer.toString();
+        template = template.replaceAll("ENVIRONMENT_NAME", parent.getEnvironmentName());
+        if (applications != null) {
+            template = template.replaceAll("ENVIRONMENT_APPLICATIONS", applications);
+        }
+        if (parent.getEnvironment().getWeblinks() != null) {
+            template = template.replaceAll("ENVIRONMENT_WEBLINKS", parent.getEnvironment().getWeblinks());
+        }
+        if (parent.getEnvironment().getNotes() != null) {
+            template = template.replaceAll("ENVIRONMENT_NOTES", parent.getEnvironment().getNotes());
+        }
+        // update the environment homepage area
+        area.setText(template);
+    }
+
+}
\ No newline at end of file

Added: incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/InfoWindow.java
URL: http://svn.apache.org/viewvc/incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/InfoWindow.java?rev=1205585&view=auto
==============================================================================
--- incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/InfoWindow.java (added)
+++ incubator/kalumet/trunk/console/src/main/java/org/apache/kalumet/console/app/InfoWindow.java Wed Nov 23 20:52:16 2011
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console.app;
+
+import nextapp.echo2.app.Button;
+import nextapp.echo2.app.Extent;
+import nextapp.echo2.app.Label;
+import nextapp.echo2.app.Row;
+import nextapp.echo2.app.SplitPane;
+import nextapp.echo2.app.WindowPane;
+import nextapp.echo2.app.event.ActionEvent;
+import nextapp.echo2.app.event.ActionListener;
+
+/**
+ * Info screen <code>WindowPane</code>
+ */
+public class InfoWindow extends WindowPane {
+
+    /**
+     * Create a new <code>WindowPane</code> with the information message
+     *
+     * @param message the info message to display
+     */
+    public InfoWindow(String message) {
+        super();
+
+        setTitle(Messages.getString("InfoWindow.Title"));
+        setStyleName("InfoWindow");
+        setModal(true);
+        setDefaultCloseOperation(WindowPane.DISPOSE_ON_CLOSE);
+
+        // create a split pane
+        SplitPane splitPane = new SplitPane(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP, new Extent(32));
+        add(splitPane);
+
+        // define a row with the control pane
+        Row controlRow = new Row();
+        controlRow.setStyleName("ControlPane");
+        splitPane.add(controlRow);
+        // define the close button
+        Button closeButton = new Button(Messages.getString("close"), Styles.CROSS);
+        closeButton.setStyleName("ControlPane.Button");
+        closeButton.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                InfoWindow.this.userClose();
+            }
+        });
+        controlRow.add(closeButton);
+
+        // define the info message label
+        Label infoMessageLabel = new Label(message);
+        infoMessageLabel.setStyleName("InfoWindow.MessageLabel");
+        splitPane.add(infoMessageLabel);
+
+    }
+
+}
\ No newline at end of file



Mime
View raw message