From b9402204384bb5cfc25e6038d2f976f9f0c16fba Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Mon, 18 Nov 2013 09:53:33 +0100 Subject: 3.0-SNAPSHOT IssueID #28 --- .../lifecycle/desc/ElemActDefOutcomeHandler.java | 20 ++--- .../gui/lifecycle/desc/WfVertexDefFactory.java | 2 +- .../gui/lifecycle/instance/ActivityRenderer.java | 25 +++--- .../gui/lifecycle/instance/TransitionPanel.java | 75 ++++++++++++------ .../gui/lifecycle/instance/WfVertexFactory.java | 2 +- .../java/com/c2kernel/gui/tabs/ExecutionPane.java | 2 +- .../java/com/c2kernel/gui/tabs/HistoryPane.java | 13 ++- .../java/com/c2kernel/gui/tabs/JobListPane.java | 3 +- .../c2kernel/gui/tabs/execution/ActivityItem.java | 7 +- .../gui/tabs/execution/ActivityViewer.java | 92 +++++++++++++--------- .../c2kernel/gui/tabs/execution/RequestButton.java | 18 +++-- 11 files changed, 155 insertions(+), 104 deletions(-) (limited to 'src/main/java/com/c2kernel') diff --git a/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java b/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java index b7398fe..08cbf4c 100644 --- a/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java +++ b/src/main/java/com/c2kernel/gui/lifecycle/desc/ElemActDefOutcomeHandler.java @@ -118,18 +118,18 @@ public class ElemActDefOutcomeHandler extends VertexPropertyPanel implements Out public static void exportAct(File dir, BufferedWriter imports, ActivityDef actDef) throws Exception { // Export associated schema - exportSchema((String)actDef.getProperties().get("SchemaType"), (String)actDef.getProperties().get("SchemaVersion"), imports, new File(dir, "OD")); + exportSchema((String)actDef.getProperties().get("SchemaType"), Integer.parseInt(actDef.getProperties().get("SchemaVersion").toString()), imports, new File(dir, "OD")); // Export associated script - exportScript((String)actDef.getProperties().get("ScriptName"), (String)actDef.getProperties().get("ScriptVersion"), imports, new File(dir, "SC")); + exportScript((String)actDef.getProperties().get("ScriptName"), Integer.parseInt(actDef.getProperties().get("ScriptVersion").toString()), imports, new File(dir, "SC")); //Export child act if composite if (actDef instanceof CompositeActivityDef) { CompositeActivityDef compActDef = (CompositeActivityDef)actDef; for (int i=0; iboot/CA/"+compActDef.getActName()+".xml\n"); + imports.write("boot/CA/"+compActDef.getActName()+".xml\n"); } } else { FileStringUtility.string2File(new File(new File(dir, "EA"), actDef.getActName()+".xml"), Gateway.getMarshaller().marshall(actDef)); - if (imports!=null) imports.write("boot/EA/"+actDef.getActName()+".xml\n"); + if (imports!=null) imports.write("boot/EA/"+actDef.getActName()+".xml\n"); } } - public static void exportScript(String name, String version, BufferedWriter imports, File dir) { + public static void exportScript(String name, Integer version, BufferedWriter imports, File dir) { if (name == null || name.length()==0 || name.contains(":")) return; try { FileStringUtility.string2File(new File(dir, name+".xml"), @@ -160,11 +160,11 @@ public class ElemActDefOutcomeHandler extends VertexPropertyPanel implements Out } } - public static void exportSchema(String name, String version, BufferedWriter imports, File dir) { + public static void exportSchema(String name, Integer version, BufferedWriter imports, File dir) { if (name == null || name.length()==0) return; try { FileStringUtility.string2File(new File(dir, name+".xsd"), - LocalObjectLoader.getSchema(name, Integer.parseInt(version)).schema); + LocalObjectLoader.getSchema(name, version).schema); if (imports!=null) imports.write("boot/OD/"+name+".xsd\n"); } catch (Exception ex) { Logger.error(ex); diff --git a/src/main/java/com/c2kernel/gui/lifecycle/desc/WfVertexDefFactory.java b/src/main/java/com/c2kernel/gui/lifecycle/desc/WfVertexDefFactory.java index fe70678..17b2a38 100644 --- a/src/main/java/com/c2kernel/gui/lifecycle/desc/WfVertexDefFactory.java +++ b/src/main/java/com/c2kernel/gui/lifecycle/desc/WfVertexDefFactory.java @@ -78,7 +78,7 @@ public class WfVertexDefFactory implements VertexFactory, WorkflowDialogue { try { - act = LocalObjectLoader.getActDef(newName, "last"); + act = LocalObjectLoader.getActDef(newName, 0); } catch (Exception ex) { diff --git a/src/main/java/com/c2kernel/gui/lifecycle/instance/ActivityRenderer.java b/src/main/java/com/c2kernel/gui/lifecycle/instance/ActivityRenderer.java index 4d7da95..a13d610 100644 --- a/src/main/java/com/c2kernel/gui/lifecycle/instance/ActivityRenderer.java +++ b/src/main/java/com/c2kernel/gui/lifecycle/instance/ActivityRenderer.java @@ -6,11 +6,11 @@ import java.awt.Paint; import java.awt.Polygon; import com.c2kernel.common.GTimeStamp; +import com.c2kernel.common.InvalidDataException; import com.c2kernel.graph.model.GraphPoint; import com.c2kernel.graph.model.Vertex; import com.c2kernel.gui.graph.view.VertexRenderer; import com.c2kernel.lifecycle.instance.Activity; -import com.c2kernel.lifecycle.instance.stateMachine.States; import com.c2kernel.utils.DateUtility; import com.c2kernel.utils.Language; public class ActivityRenderer implements VertexRenderer @@ -37,21 +37,14 @@ public class ActivityRenderer implements VertexRenderer linesOfText[2] = Language.translate(activity.getErrors()); else { - int cs = activity.getCurrentState(); - if (cs == States.WAITING && activity.getActive()) - linesOfText[2] = - Language.translate(States.getStateName(cs)) - + (((Boolean) activity.getProperties().get("Show time")).booleanValue() - ? " " + getWaitTime(activity.getActiveDate()) - : ""); - else if (cs == States.STARTED) - linesOfText[2] = - Language.translate(States.getStateName(cs)) - + (((Boolean) activity.getProperties().get("Show time")).booleanValue() - ? " " + getWaitTime(activity.getStartDate()) - : ""); - else - linesOfText[2] = Language.translate(States.getStateName(cs)); + boolean showTime = activity.getActive() && ((Boolean) activity.getProperties().get("Show time")).booleanValue(); + String stateName = "Invalid State"; + try { + stateName = activity.getStateName(); + } catch (InvalidDataException ex) { } + + linesOfText[2] = + Language.translate(stateName) + (showTime ? " " + getWaitTime(activity.getStateDate()) : ""); } FontMetrics metrics = g2d.getFontMetrics(); diff --git a/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java b/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java index b1406c5..f8cbff2 100644 --- a/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java +++ b/src/main/java/com/c2kernel/gui/lifecycle/instance/TransitionPanel.java @@ -4,6 +4,7 @@ import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Map; import javax.swing.Box; import javax.swing.JButton; @@ -12,6 +13,7 @@ import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; +import com.c2kernel.common.InvalidDataException; import com.c2kernel.entity.agent.Job; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.graph.model.Vertex; @@ -20,9 +22,9 @@ import com.c2kernel.gui.graph.view.SelectedVertexPanel; import com.c2kernel.gui.tabs.EntityTabPane; import com.c2kernel.gui.tabs.execution.Executor; import com.c2kernel.lifecycle.instance.Activity; +import com.c2kernel.lifecycle.instance.stateMachine.State; import com.c2kernel.lifecycle.instance.stateMachine.StateMachine; -import com.c2kernel.lifecycle.instance.stateMachine.States; -import com.c2kernel.lifecycle.instance.stateMachine.Transitions; +import com.c2kernel.lifecycle.instance.stateMachine.Transition; import com.c2kernel.utils.Logger; /************************************************************************** @@ -40,7 +42,7 @@ public class TransitionPanel extends SelectedVertexPanel implements ActionListen protected GridBagConstraints c; protected Box transBox; protected JComboBox executors; - protected JComboBox states = new JComboBox(States.states); + protected JComboBox states = new JComboBox(); protected JCheckBox active = new JCheckBox(); protected JLabel status = new JLabel(); protected ItemProxy mItem; @@ -106,27 +108,56 @@ public class TransitionPanel extends SelectedVertexPanel implements ActionListen clear(); if (!(vert instanceof Activity)) return; mCurrentAct = (Activity)vert; - states.setSelectedIndex(mCurrentAct.getCurrentState()); + StateMachine sm; + try { + sm = mCurrentAct.getStateMachine(); + } catch (InvalidDataException e) { + status.setText("Invalid state machine."); + Logger.error(e); + return; + } + states.removeAllItems(); + int currentState; + try { + currentState = mCurrentAct.getState(); + } catch (InvalidDataException e) { + status.setText("Could not find activity state"); + Logger.error(e); + return; + } + for (State thisState : sm.getStates()) { + states.addItem(thisState); + if (currentState == thisState.getId()) + states.setSelectedItem(thisState); + } states.setEnabled(true); active.setSelected(mCurrentAct.active); active.setEnabled(true); Logger.msg(1, "Retrieving possible transitions for activity "+mCurrentAct.getName()); - int[] transitions = mCurrentAct.getMachine().possibleTransition(); - if (transitions.length == 0) { + Map transitions; + try { + transitions = mCurrentAct.getStateMachine().getPossibleTransitions(mCurrentAct, MainFrame.userAgent.getPath()); + } catch (Exception e) { + status.setText("Error loading possible transitions of activity. See log."); + Logger.error(e); + return; + } + + if (transitions.size() == 0) { status.setText("None"); return; } - for (int i = 0; i < transitions.length; i++) { - String trans= Transitions.getTransitionName(transitions[i]); - if (!(transitions[i]==Transitions.DONE) && !(transitions[i]==Transitions.COMPLETE)) { - String buttonLabel = trans.substring(0,1).toUpperCase()+trans.substring(1); - JButton thisTrans = new JButton(buttonLabel); - thisTrans.setActionCommand("Trans:"+String.valueOf(transitions[i])); + + for (Transition trans:transitions.keySet()) { + + if (!trans.hasOutcome() || (trans.hasOutcome() && !trans.getOutcome().isRequired())) { + JButton thisTrans = new JButton(trans.getName()); + thisTrans.setActionCommand("Trans:"+trans.getId()); thisTrans.addActionListener(this); transBox.add(thisTrans); transBox.add(Box.createHorizontalGlue()); } - status.setText(transitions.length+" transitions possible."); + status.setText(transitions.size()+" transitions possible."); } revalidate(); } @@ -138,22 +169,19 @@ public class TransitionPanel extends SelectedVertexPanel implements ActionListen return; } if (e.getSource() == states && mCurrentAct != null) { - mCurrentAct.getMachine().state = states.getSelectedIndex(); + mCurrentAct.setState(states.getSelectedIndex()); return; } if (!e.getActionCommand().startsWith("Trans:")) return; int transition = Integer.parseInt(e.getActionCommand().substring(6)); Logger.msg("Requesting transition "+transition); - Job thisJob = new Job(mItem.getSystemKey(), - mCurrentAct.getPath(), - transition, - new StateMachine(mCurrentAct).simulate(transition), - mCurrentAct.getCurrentState(), - mCurrentAct.getName(), - mCurrentAct.getProperties(), - mCurrentAct.getType(), - MainFrame.userAgent.getName()); try { + StateMachine actSM = mCurrentAct.getStateMachine(); + Job thisJob = new Job(mCurrentAct, + mItem.getSystemKey(), + actSM.getTransition(transition), + MainFrame.userAgent.getPath(), + "Admin"); Executor selectedExecutor = (Executor)executors.getSelectedItem(); selectedExecutor.execute(thisJob, status); } catch (Exception ex) { @@ -170,7 +198,6 @@ public class TransitionPanel extends SelectedVertexPanel implements ActionListen mCurrentAct = null; transBox.removeAll(); status.setText("No activity selected"); - states.setSelectedIndex(0); states.setEnabled(false); active.setSelected(false); active.setEnabled(false); diff --git a/src/main/java/com/c2kernel/gui/lifecycle/instance/WfVertexFactory.java b/src/main/java/com/c2kernel/gui/lifecycle/instance/WfVertexFactory.java index 38e3ec4..e7f0034 100644 --- a/src/main/java/com/c2kernel/gui/lifecycle/instance/WfVertexFactory.java +++ b/src/main/java/com/c2kernel/gui/lifecycle/instance/WfVertexFactory.java @@ -78,7 +78,7 @@ public class WfVertexFactory implements VertexFactory, WorkflowDialogue Activity act = null; try { - ActivityDef actD = LocalObjectLoader.getActDef(newName, "last"); + ActivityDef actD = LocalObjectLoader.getActDef(newName, 0); act = (Activity)actD.instantiate(unicName); } catch (Exception e) diff --git a/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java index 9d9a395..1f5d3b8 100644 --- a/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/ExecutionPane.java @@ -86,7 +86,7 @@ public class ExecutionPane extends EntityTabPane implements EntityProxyObserver< jobList = ((ItemProxy)sourceEntity.getEntity()).getJobList(MainFrame.userAgent); activitySelector.addItem(emptyAct); for (Job thisJob : jobList) { - Logger.msg(7, "ExecutionPane - loadJobList " + thisJob.hasOutcome() + "|" + thisJob.getSchemaType() + "|" + thisJob.getSchemaVersion() + "|"); + //Logger.msg(7, "ExecutionPane - loadJobList " + thisJob.hasOutcome() + "|" + thisJob.getSchemaName() + "|" + thisJob.getSchemaVersion() + "|"); ActivityItem newAct = new ActivityItem(thisJob); if (activities.contains(newAct)) { int actIndex = activities.indexOf(newAct); diff --git a/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java b/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java index 7a24f37..8384dd8 100644 --- a/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java @@ -28,9 +28,10 @@ import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.events.Event; import com.c2kernel.events.History; import com.c2kernel.gui.MainFrame; -import com.c2kernel.lifecycle.instance.stateMachine.Transitions; +import com.c2kernel.lifecycle.instance.stateMachine.StateMachine; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.utils.Language; +import com.c2kernel.utils.LocalObjectLoader; import com.c2kernel.utils.Logger; /** @@ -176,6 +177,7 @@ public class HistoryPane extends EntityTabPane implements ActionListener, Entity private class HistoryTableModel extends AbstractTableModel { Event[] event; + StateMachine[] sm; Integer[] ids; int loaded = 0; int startId = 0; @@ -192,9 +194,13 @@ public class HistoryPane extends EntityTabPane implements ActionListener, Entity public void setView(int startId, int size) { event = new Event[size]; ids = new Integer[size]; + sm = new StateMachine[size]; this.startId = startId; for (int i=0; i jobs = new ArrayList(); @@ -18,7 +18,8 @@ public class ActivityItem { public ActivityItem(Job thisJob) { stepPath = thisJob.getStepPath(); - state = thisJob.getCurrentState(); + state = thisJob.getTransition().getOriginStateId(); + stateName = thisJob.getOriginStateName(); name = thisJob.getStepName(); jobs.add(thisJob); } @@ -37,7 +38,7 @@ public class ActivityItem { @Override public String toString() { - return name+(state>-1?" ("+States.getStateName(state)+")":""); + return name+(state>-1?" ("+stateName+")":""); } @Override diff --git a/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java b/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java index 7723e16..a265bc1 100644 --- a/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java +++ b/src/main/java/com/c2kernel/gui/tabs/execution/ActivityViewer.java @@ -19,6 +19,7 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; +import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.agent.Job; import com.c2kernel.entity.proxy.ItemProxy; @@ -29,6 +30,7 @@ import com.c2kernel.gui.tabs.outcome.InvalidOutcomeException; import com.c2kernel.gui.tabs.outcome.InvalidSchemaException; import com.c2kernel.gui.tabs.outcome.OutcomeException; import com.c2kernel.gui.tabs.outcome.OutcomeHandler; +import com.c2kernel.persistency.outcome.Schema; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.Language; import com.c2kernel.utils.LocalObjectLoader; @@ -171,29 +173,42 @@ public class ActivityViewer extends JPanel implements Runnable { outcomeButtons.add(Box.createHorizontalStrut(5)); newButton.setEnabled(false); - if (thisJob.requiresOutcome() && outcomePanel == null) { - try { - outcomePanel = getOutcomeHandler(thisJob); - outcomeView = outcomePanel.getPanel(); - newButton.setEnabled(true); - } catch (ObjectNotFoundException ex) { - outcomeView.add(new JLabel(Language.translate("Schema not found:")+" "+thisJob.getSchemaType()+" v"+thisJob.getSchemaVersion())); - } catch (Exception ex) { - outcomeView.add(new JLabel(Language.translate("ERROR loading outcome editor: ") - +ex.getClass().getName()+" ("+ex.getMessage()+")")); - Logger.error(ex); - } - } - else if (thisJob.isError()) { - try { - errorPanel = getOutcomeHandler(thisJob); - errorView.add(errorPanel.getPanel()); - newButton.setEnabled(true); - } catch (Exception ex) { - errorView.add(new JLabel(Language.translate("ERROR loading error editor: ") + if (thisJob.hasOutcome()) { + + String schemaName; + int schemaVersion; + try { + schemaName = thisJob.getSchemaName(); + schemaVersion = thisJob.getSchemaVersion(); + } catch (Exception e) { + newButton.setToolTipText("Could not load schema for this job."); + continue; + } + + if(!schemaName.equals("Errors") && outcomePanel == null) { + try { + outcomePanel = getOutcomeHandler(thisJob); + outcomeView = outcomePanel.getPanel(); + newButton.setEnabled(true); + } catch (ObjectNotFoundException ex) { + outcomeView.add(new JLabel(Language.translate("Schema not found:")+" "+schemaName+" v"+schemaVersion)); + } catch (Exception ex) { + outcomeView.add(new JLabel(Language.translate("ERROR loading outcome editor: ") +ex.getClass().getName()+" ("+ex.getMessage()+")")); - - } + Logger.error(ex); + } + } + if (schemaName.equals("Errors")) { + try { + errorPanel = getOutcomeHandler(thisJob); + errorView.add(errorPanel.getPanel()); + newButton.setEnabled(true); + } catch (Exception ex) { + errorView.add(new JLabel(Language.translate("ERROR loading error editor: ") + +ex.getClass().getName()+" ("+ex.getMessage()+")")); + + } + } } else newButton.setEnabled(true); @@ -212,11 +227,11 @@ public class ActivityViewer extends JPanel implements Runnable { } - public OutcomeHandler getOutcomeHandler(Job thisJob) throws ObjectNotFoundException, InvalidSchemaException, InvalidOutcomeException { + public OutcomeHandler getOutcomeHandler(Job thisJob) throws ObjectNotFoundException, InvalidSchemaException, InvalidOutcomeException, InvalidDataException { String schema; OutcomeHandler thisForm; - schema = LocalObjectLoader.getSchema(thisJob.getSchemaType(), thisJob.getSchemaVersion()).schema; - thisForm = EntityTabPane.getOutcomeHandler(thisJob.getSchemaType(), thisJob.getSchemaVersion()); + schema = LocalObjectLoader.getSchema(thisJob.getSchemaName(), thisJob.getSchemaVersion()).schema; + thisForm = EntityTabPane.getOutcomeHandler(thisJob.getSchemaName(), thisJob.getSchemaVersion()); thisForm.setReadOnly(false); thisForm.setDescription(schema); String outcomeString = thisJob.getOutcomeString(); @@ -280,21 +295,21 @@ public class ActivityViewer extends JPanel implements Runnable { public void execute(Job thisJob) { try { - if (thisJob.requiresOutcome() && thisJob.getSchemaType().length() > 0) - thisJob.setOutcome(outcomePanel.getOutcome()); - else if (thisJob.isError()) { - //JOptionPane errorDialog = new JOptionPane(); - Box errorBox = Box.createVerticalBox(); - errorBox.add(new JLabel("Please give details of the error:")); - errorBox.add(errorView); - int result = JOptionPane.showConfirmDialog(this, errorBox, "Send Error", JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE); - if (result != JOptionPane.OK_OPTION) - return; - thisJob.setOutcome(errorPanel.getOutcome()); - } + if (thisJob.hasOutcome()) + if (!thisJob.getSchemaName().equals("Errors")) + thisJob.setOutcome(outcomePanel.getOutcome()); + else { + Box errorBox = Box.createVerticalBox(); + errorBox.add(new JLabel("Please give details of the error:")); + errorBox.add(errorView); + int result = JOptionPane.showConfirmDialog(this, errorBox, "Send Error", JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE); + if (result != JOptionPane.OK_OPTION) + return; + thisJob.setOutcome(errorPanel.getOutcome()); + } executingJob = thisJob; new Thread(this).start(); - } catch (OutcomeException ex) { + } catch (Exception ex) { MainFrame.exceptionDialog(ex); } @@ -313,6 +328,7 @@ public class ActivityViewer extends JPanel implements Runnable { } catch (Exception e) { Logger.error(e); MainFrame.progress.stopBouncing(Language.translate("Error during execution")); + status.setText(Language.translate("Error during execution: "+e.getClass().getSimpleName())); MainFrame.exceptionDialog(e); } enableAllButtons(true); diff --git a/src/main/java/com/c2kernel/gui/tabs/execution/RequestButton.java b/src/main/java/com/c2kernel/gui/tabs/execution/RequestButton.java index 96123ff..440bb58 100644 --- a/src/main/java/com/c2kernel/gui/tabs/execution/RequestButton.java +++ b/src/main/java/com/c2kernel/gui/tabs/execution/RequestButton.java @@ -6,7 +6,8 @@ import java.awt.event.ActionListener; import javax.swing.JButton; import com.c2kernel.entity.agent.Job; -import com.c2kernel.lifecycle.instance.stateMachine.Transitions; +import com.c2kernel.gui.MainFrame; +import com.c2kernel.utils.Logger; /** * Each job gets a RequestButton */ @@ -20,10 +21,17 @@ import com.c2kernel.lifecycle.instance.stateMachine.Transitions; super(); this.myJob = myJob; this.parent = parent; - String label = Transitions.getTransitionName(myJob.getPossibleTransition()); - label = Character.toUpperCase(label.charAt(0))+label.substring(1); - if (myJob.requiresOutcome()) setBackground(Color.white); - if (myJob.isError()) setBackground(Color.pink); + String label = myJob.getTransition().getName(); + if (myJob.hasOutcome()) { + setBackground(Color.white); + try { + if (myJob.getSchemaName().equals("Errors")) setBackground(Color.pink); + } catch (Exception e) { + Logger.error(e); + MainFrame.exceptionDialog(e); + setEnabled(false); + } + } super.setText(label); addActionListener(this); } -- cgit v1.2.3