//{HEADER
/**
* This class is part of jnex 'Nexirius Application Framework for Java'
*
* Copyright (C) Nexirius GmbH, CH-4450 Sissach, Switzerland (www.nexirius.ch)
*
* <p>This library is free software; you can redistribute it and/or<br>
* modify it under the terms of the GNU Lesser General Public<br>
* License as published by the Free Software Foundation; either<br>
* version 2.1 of the License, or (at your option) any later version.</p>
*
* <p>This library is distributed in the hope that it will be useful,<br>
* but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU<br>
* Lesser General Public License for more details.</p>
*
* <p>You should have received a copy of the GNU Lesser General Public<br>
* License along with this library; if not, write to the Free Software<br>
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>
* </blockquote>
*
* <p>
* Nexirius GmbH, hereby disclaims all copyright interest in<br>
* the library jnex' 'Nexirius Application Framework for Java' written<br>
* by Marcel Baumann.</p>
*/
//}HEADER
package com.nexirius.framework.dataeditor;
import com.nexirius.framework.datamodel.*;
import com.nexirius.framework.dataviewer.DataViewer;
import com.nexirius.framework.dataviewer.LayoutItem;
import javax.swing.*;
import java.awt.*;
import java.util.Hashtable;
public class AssistantEditor extends DataViewer {
JPanel panel;
Hashtable cards = new Hashtable();
public AssistantEditor(AssistantModel model) {
super(model);
}
/**
* Returns true
*/
public boolean isEditor() {
return true;
}
public void create() {
if (panel != null) {
return;
}
panel = new JPanel();
panel.setLayout(new CardLayout());
setJComponent(panel);
switchState();
}
public AssistantModel getAssistantModel() {
return (AssistantModel) getDataModel();
}
public void update() {
}
public void dataModelGrabFocus(DataModelEvent event) {
DataModelVector v = event.getTransmitterVector();
if (v.size() <= 2) {
switchState();
}
}
public synchronized void switchState() {
if (panel == null) {
return;
}
LayoutItem layout = getLayout();
DataModel model = getAssistantModel().getActModel();
String name = model.getFieldName();
JComponent comp = (JComponent) cards.get(name);
try {
if (comp == null) {
if (layout == null) {
// create comp with default viewer
DataViewer viewer = getFactory().createDefaultEditor(model);
comp = viewer.getJComponent();
add(comp);
} else {
layout.doLayout(this);
}
}
((CardLayout) panel.getLayout()).show(panel, name);
} catch (Exception ex) {
ex.printStackTrace();
panel.add(new JLabel("Exception"), BorderLayout.CENTER);
}
panel.revalidate();
if (model != null && model instanceof AssistantFormModel) {
if (!((AssistantFormModel) model).hasControls()) {
new StepNextThread((AssistantFormModel) model);
}
}
}
public void add(JComponent comp) {
String name = getAssistantModel().getActModel().getFieldName();
JComponent act_comp = (JComponent) cards.get(name);
if (act_comp == null) {
panel.add(comp, name);
cards.put(name, comp);
}
}
public String getViewerName() {
return "AssistantViewer";
}
class StepNextThread extends Thread {
AssistantFormModel assistantFormModel;
StepNextThread(AssistantFormModel model) {
assistantFormModel = model;
start();
}
public void run() {
assistantFormModel.stepNext();
}
}
}