initialize

This commit is contained in:
Pruefer
2025-06-06 09:15:13 +02:00
commit fa7c2730f1
5817 changed files with 1339670 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
/*
* Copyright (c) 2013 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface;
import static com.itac.util.logging.LogLevel.ERROR;
import java.net.InetAddress;
import java.util.Date;
import com.itac.mes.datainterface.data.InterfaceStartType;
import com.itac.mes.datainterface.ihap.IRemoteInterface;
import com.itac.util.logging.LogHandler;
public class CheckClientConnectionThread extends Thread {
private static String LOGGER = CheckClientConnectionThread.class.getSimpleName();
// fuer diese properties soll die Verbindung geprueft werden
private RemoteInterfaceInfo remoteIntfInfo;
private int controlPort;
private DataInterfaceAdminConsole adminConsole;
public CheckClientConnectionThread(String name, DataInterfaceAdminConsole adminConsole, RemoteInterfaceInfo remoteInterfaceInfo,
int controlPort) {
super(name);
this.adminConsole = adminConsole;
this.remoteIntfInfo = remoteInterfaceInfo;
this.controlPort = controlPort;
}
@Override
public void run() {
IRemoteInterface remoteInterfaceConnection = null;
try {
remoteInterfaceConnection = remoteIntfInfo.getConnection();
InetAddress addr = InetAddress.getLocalHost();
if (remoteInterfaceConnection == null) {
// update der Instanz, nicht erreichbar, nicht richtig konfiguriert.
adminConsole.updateView(remoteIntfInfo);
return;
}
String hostname = addr.getHostName();
remoteInterfaceConnection.setGuiConsoleProperties(hostname, controlPort);
remoteIntfInfo.lastUpdated = new Date();
remoteIntfInfo.title = remoteInterfaceConnection.getTitle(null);
remoteIntfInfo.instanceInfos = remoteInterfaceConnection.getInstanceInfos();
remoteIntfInfo.type = remoteInterfaceConnection.getStartType();
adminConsole.updateView(remoteIntfInfo);
} catch (Throwable e1) {
LogHandler.log(LOGGER, ERROR, "client " + remoteIntfInfo.appid + " not reachable, connection refused");
// Connection problem
remoteIntfInfo.lastUpdated = new Date();
remoteIntfInfo.instanceInfos = null;
remoteIntfInfo.title = "";
remoteIntfInfo.type = InterfaceStartType.UNKNOWN;
// wenn diese Instanz bisher geoeffnet war dann View schliessen
adminConsole.closeView(remoteIntfInfo.appid);
} finally {
if (remoteInterfaceConnection != null) {
remoteInterfaceConnection.shutdown();
}
}
LogHandler.log(LOGGER, ERROR, "finishing thread" + this.getName());
this.interrupt();
}
}

View File

@@ -0,0 +1,960 @@
/*
* Copyright (c) 2013 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied, printed, edited
* or otherwise distributed, be stored in a retrieval system, or be translated into another language without the written permission
* of iTAC Software AG.
*/
package com.itac.mes.datainterface;
import static com.itac.artes.ArtesPropertyNames.PROP_ARTES_CLUSTERNODES;
import static com.itac.util.constants.imsapi.ImsApiKey.CONFIG_ADMIN;
import static com.itac.util.constants.imsapi.ImsApiKey.CONFIG_APPID;
import static com.itac.util.constants.imsapi.ImsApiKey.CONFIG_APPTYPE;
import static com.itac.util.constants.imsapi.ImsApiKey.CONFIG_CLUSTER;
import static com.itac.util.constants.imsapi.ImsApiKey.CONFIG_VALUE;
import static com.itac.util.constants.imsapi.ImsApiKey.PARAMETER_NAME;
import static com.itac.util.constants.imsapi.ImsApiKey.PARAMETER_SCOPE;
import static com.itac.util.logging.LogLevel.DEBUG;
import static com.itac.util.logging.LogLevel.ERROR;
import static com.itac.util.logging.LogLevel.INFO;
import static com.itac.util.logging.LogLevel.WARN;
import java.awt.event.ActionEvent;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import javax.jnlp.BasicService;
import javax.jnlp.ServiceManager;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import com.itac.artes.ArtesSettings;
import com.itac.artes.ihap.LocatorFactory;
import com.itac.artes.ihas.LookupException;
import com.itac.mes.client.ImsApiTools;
import com.itac.mes.config.domain.ItacConfigException;
import com.itac.mes.config.domain.Parameter;
import com.itac.mes.datainterface.config.AdminConsoleConfig;
import com.itac.mes.datainterface.control.LoginJob;
import com.itac.mes.datainterface.control.LoginListener;
import com.itac.mes.datainterface.data.AdminConsoleWindowSettings;
import com.itac.mes.datainterface.data.InterfaceStartType;
import com.itac.mes.datainterface.data.Rectangle;
import com.itac.mes.datainterface.data.Settings;
import com.itac.mes.datainterface.gui.DataInterfaceAdminConsoleDlg;
import com.itac.mes.datainterface.gui.DataInterfaceConsoleDlg;
import com.itac.mes.datainterface.gui.DataInterfaceMenuAction;
import com.itac.mes.datainterface.gui.ISimulationMessageReceiver;
import com.itac.mes.datainterface.gui.IWorkerPane;
import com.itac.mes.datainterface.gui.InstanceMessage;
import com.itac.mes.datainterface.gui.OpenViewListener;
import com.itac.mes.datainterface.gui.SettingsDlg;
import com.itac.mes.datainterface.ihap.IRemoteGui;
import com.itac.mes.datainterface.ihap.IRemoteInterface;
import com.itac.mes.datainterface.ihap.InstanceInfo;
import com.itac.mes.datainterface.ihap.RemoteGuiSocketAdapter;
import com.itac.mes.datainterface.service.LoginService;
import com.itac.mes.imsapi.domain.IMSApiService;
import com.itac.mes.imsapi.domain.container.KeyValue;
import com.itac.mes.imsapi.domain.container.Result_configGetDimensionValues;
import com.itac.mes.imsapi.domain.container.Result_configGetValues;
import com.itac.resource.ResourcePool;
import com.itac.resource.ResourcesIMSInterfaces;
import com.itac.util.constants.imsapi.ImsApiKey;
import com.itac.util.logging.LogHandler;
import com.itac.util.logging.LogLevel;
public class DataInterfaceAdminConsole implements IRemoteGui, ISimulationMessageReceiver, OpenViewListener, LoginListener {
public static final String APPTYPE = DataInterfaceAdminConsole.class.getSimpleName();
private static final String LOGGER = DataInterfaceAdminConsole.class.getSimpleName();
/**
* das ist der Port, der von der AdminCosole aufgemacht wird, und auf dem die Interface Daten an die console schicken können
*/
private static final String CONTROL_PORT = APPTYPE + ".controlPort";
/** hier werden die eigenen GUI-eigenschaften gespeichert */
private static final String WINDOW_SETTINGS = APPTYPE + ".windowSettings";
/**
* eine Liste mit allen app-ids, feur die z.Zt. eine View offen ist. Diese Liste wird beim beenden des Clients geschrieben und
* beim erneuten starten werden alle diese Views versucht erneut zu offnen
*/
private static final String OPEN_VIEW_LIST = APPTYPE + ".openViewList";
private static final String SETTINGS = APPTYPE + ".settings";
private static final String VALID_CONFIGURATIONS_ONLY = SETTINGS + ".validConfigurationsOnly";
// statische Instanz
private static DataInterfaceAdminConsole dataInterfaceAdminConsole;
private RemoteGuiSocketAdapter remoteGuiSock;
private AdminConsoleConfig adminConsoleConfig;
private DataInterfaceAdminConsoleDlg adminConsoleDlg;
private SettingsDlg settingsDlg;
private int iControlPort;
private Settings settings = new Settings();
private LoginJob loginJob;
// alle geöffneten Dialog sind hier gehalten
private Map<String, DataInterfaceConsoleDlg> dataInterfaceDlgMap = new HashMap<String, DataInterfaceConsoleDlg>();
/** Liste mit allen konfigurierten APP-IDS */
private List<RemoteInterfaceInfo> remoteInterfaceInfos;
private Object syncObject = new Object();
private Parameter windowPositionParameter;
private Map<String, Thread> checkThreadMap = new HashMap<String, Thread>();
private Thread connectionCheckThread = new Thread("CheckInterfacesThread") {
@Override
public void run() {
// über alle
while (true) {
synchronized (syncObject) {
LogHandler.log(APPTYPE, DEBUG, "start updating all interfaces connections ");
for (RemoteInterfaceInfo remoteInterfaceInfo : remoteInterfaceInfos) {
if (!remoteInterfaceInfo.hasValidConnectionProperties()) {
LogHandler.log(APPTYPE, INFO,
"connection properties for appid " + remoteInterfaceInfo.appid + " are invalid, do not connect");
adminConsoleDlg.setStatus(ResourcePool.getInstance()
.getMesExceptionMessage(ResourcesIMSInterfaces.INVALID_CONNECTION_PROPERTIES, remoteInterfaceInfo.appid));
continue;
}
// es wurden theoretisch gueltige Connection Properties gefunden
// versuchen, diesen Client zu erreichen
try {
Thread chkConnthread = getConnectionThread(dataInterfaceAdminConsole, remoteInterfaceInfo, iControlPort);
try {
chkConnthread.start();
} catch (IllegalThreadStateException e) {
// remove Thread from map if not working any longer
checkThreadMap.remove(chkConnthread.getName());
}
} catch (Exception e) {
LogHandler.log(APPTYPE, ERROR, "failed to connect to client " + remoteInterfaceInfo.appid, e);
adminConsoleDlg.setStatus(ResourcePool.getInstance()
.getMesExceptionMessage(ResourcesIMSInterfaces.CONNECTION_TO_CLIENT_FAILED, remoteInterfaceInfo.appid));
closeView(remoteInterfaceInfo.appid);
}
remoteInterfaceInfo.lastUpdated = new Date();
}
adminConsoleDlg.setRemoteInterfaceInfo(remoteInterfaceInfos);
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// Egal, wenn diese Exception auftritt
}
}
}
};
private ComponentAdapter componentListener;
private AbstractAction settingsAction;
private AbstractAction reScanAction;
private Thread getConnectionThread(DataInterfaceAdminConsole adminConsole, RemoteInterfaceInfo remoteInterfaceInfo,
int controlPort) {
String threadName = "ConnectionThread-" + remoteInterfaceInfo.appid + "@" + remoteInterfaceInfo.port;
if (checkThreadMap.containsKey(threadName)) {
return checkThreadMap.get(threadName);
}
Thread thread = new CheckClientConnectionThread(threadName, dataInterfaceAdminConsole, remoteInterfaceInfo, iControlPort);
checkThreadMap.put(threadName, thread);
return thread;
}
public static void main(String[] args) {
installShutDownHook();
// versuchen die clusternodes automatisch zu ermitteln
if (System.getProperty(PROP_ARTES_CLUSTERNODES) == null) {
try {
BasicService bs = (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
URL url = bs.getCodeBase();
// url parsing unterschiedlich
URL newUrl = new URL(url.getProtocol(), url.getHost(), url.getPort(), "/mes");
String value = newUrl.toString();
System.out.println("autodetect: set property " + PROP_ARTES_CLUSTERNODES + " to " + value);
System.setProperty(PROP_ARTES_CLUSTERNODES, value);
} catch (Exception ex) {
// es gibt zu diesem Zeitpunkt noch kein initialisiertes Logging
// keep System err and printStackTrace, because at the moment of calling logging is not initialized
System.err.println("automatic detection of MES failed");
ex.printStackTrace();
}
}
ArtesSettings.getAppId();
// Set default look and feel
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception cnfe) {
// keep System err and printStackTrace, because at the moment of calling logging is not initialized
System.err.println("Failed to set LookAndFeel");
cnfe.printStackTrace();
}
try {
// versuchen einen Dienst aufzuloesen
LocatorFactory.getLocator().lookup(IMSApiService.class);
} catch (LookupException e) {
// Im Fehlerfalle ein sinnvolle Fehlermeldung zeigen und nicht nur die Exception loggen
JOptionPane.showConfirmDialog(null,
"Unable to resolve ImsApi service at " + System.getProperty(PROP_ARTES_CLUSTERNODES) + "\n" + "Please check: \n"
+ " 1. the server is reachable at this address \n" + " 2. you provided a valid value for property '"
+ PROP_ARTES_CLUSTERNODES + "'" + " to the webstart application",
"Server not reachable", JOptionPane.ERROR_MESSAGE);
System.exit(-1);
}
// startup GUI Application
try {
dataInterfaceAdminConsole = new DataInterfaceAdminConsole();
dataInterfaceAdminConsole.start();
} catch (Exception ex) {
LogHandler.log(APPTYPE, ERROR, "gui failed", ex);
DataInterface.dataInterface.finish();
}
}
/**
* safely shutdown Artes Client; release open or pending connections.
*/
public static void installShutDownHook() {
Runtime.getRuntime().addShutdownHook(new Thread("shutdownhook") {
@Override
public void run() {
try {
LocatorFactory.getLocator().shutdown();
LogHandler.log(LOGGER, INFO, "artes client shut down");
} catch (Exception e) {
// ignore exception, print Only if possible
LogHandler.log(LOGGER, INFO, "problem safely shutdown artes client");
}
}
});
}
protected void settingsChanged() {
adminConsoleConfig.updateParameterValue(VALID_CONFIGURATIONS_ONLY, settings.validConfigurationsOnly);
}
public DataInterfaceAdminConsole() {
super();
// erzeugen der eigenen Konfiguration
try {
adminConsoleConfig = new AdminConsoleConfig(APPTYPE);
declareParameter();
adminConsoleConfig.readAndUpdateConfiguration();
// jetzt stehen alle Parameter und alle Werte bereit !!!
} catch (Exception e) {
LogHandler.log(APPTYPE, ERROR, "creation failed", e);
}
loginJob = new LoginJob(this, new LoginService(adminConsoleConfig));
componentListener = new ComponentAdapter() {
@Override
public void componentHidden(ComponentEvent e) {
try {
DataInterfaceConsoleDlg dataInterfaceDlg = (DataInterfaceConsoleDlg) e.getSource();
LogHandler.log(APPTYPE, INFO, "closing dialog " + dataInterfaceDlg.getRemoteInterfaceInfo().appid);
closeView(dataInterfaceDlg.getRemoteInterfaceInfo().appid);
} catch (Exception exception) {
LogHandler.log(APPTYPE, ERROR, "creation failed", exception);
}
}
};
}
private void declareParameter() {
Parameter root = new Parameter(APPTYPE, APPTYPE, Void.class, "010", AdminConsoleConfig.defaultDimPath);
adminConsoleConfig.declareParameter(root, null, null);
adminConsoleConfig.declareParameter(
new Parameter(CONTROL_PORT, "control port", Integer.class, "020", AdminConsoleConfig.defaultDimPath), root,
new Integer(33050));
adminConsoleConfig.declareParameter(new Parameter(WINDOW_SETTINGS, "window settings", AdminConsoleWindowSettings.class, "030",
AdminConsoleConfig.defaultDimPath), root, new AdminConsoleWindowSettings(100, 100, 500, 500));
Parameter openViewListParam = new Parameter(OPEN_VIEW_LIST, "open views ", List.class, "040",
AdminConsoleConfig.defaultDimPath);
openViewListParam.setMetaType(String.class);
adminConsoleConfig.declareParameter(openViewListParam, root, new ArrayList<String>());
Parameter settings = new Parameter(SETTINGS, SETTINGS, Void.class, "100", AdminConsoleConfig.defaultDimPath);
adminConsoleConfig.declareParameter(settings, root, null);
Parameter validConfigsOnly = new Parameter(VALID_CONFIGURATIONS_ONLY, "valid configurations only", Boolean.class, "110",
AdminConsoleConfig.defaultDimPath);
adminConsoleConfig.declareParameter(validConfigsOnly, settings, true);
}
public void start() throws ItacConfigException {
// Grundvoraussetzung: vorhandener API-Service
if (adminConsoleConfig.getImsApiService() == null) {
LogHandler.log(APPTYPE, ERROR, "no ImsAPI Service available");
JOptionPane.showConfirmDialog(null, "ImsApi Service is missing; application start is not possible", "Application Failure",
JOptionPane.ERROR_MESSAGE);
exit();
}
// zuerst eine Anmeldung, ohne die kann der User nichts machen! Unabhaengig davon werden z.B. schon Einstellungen
// geladen, der login startet in einem Thread.
loginJob.show();
// last size and position from window
AdminConsoleWindowSettings wds = adminConsoleConfig.getValue(WINDOW_SETTINGS, AdminConsoleWindowSettings.class);
if (wds == null) {
wds = new AdminConsoleWindowSettings();// enthaelt bereits default-Werte
}
settings.validConfigurationsOnly = adminConsoleConfig.getValue(VALID_CONFIGURATIONS_ONLY, Boolean.class);
settings.changed = false;
settingsDlg = new SettingsDlg();
// Dialog anzeigen
adminConsoleDlg = new DataInterfaceAdminConsoleDlg();
adminConsoleDlg.setBounds(wds.left, wds.top, wds.width, wds.height);
adminConsoleDlg.setOnOpenViewListener(this);
adminConsoleDlg.setSettings(settings);
settingsAction = new AbstractAction(ResourcePool.getInstance().getString(ResourcesIMSInterfaces.MNU_SETTINGS)) {
@Override
public void actionPerformed(ActionEvent e) {
settingsDlg.setSettings(settings);
settingsDlg.setModal(true);
settingsDlg.setVisible(true);
if (settings.changed) {
LogHandler.log(LOGGER, INFO, "changed settings");
adminConsoleConfig.updateParameterValue(VALID_CONFIGURATIONS_ONLY, settings.validConfigurationsOnly);
adminConsoleDlg.setSettings(settings);
}
}
};
reScanAction = new AbstractAction(ResourcePool.getInstance().getString(ResourcesIMSInterfaces.MNU_RESCAN)) {
@Override
public void actionPerformed(ActionEvent ae) {
synchronized (syncObject) {
adminConsoleDlg.setStatus(ResourcePool.getInstance().getString(ResourcesIMSInterfaces.RESCAN_APPIDS));
remoteInterfaceInfos = getConfiguredAppIds();
// zu diesen die Konfigurationen ermitteln (Host, Port ect).
for (RemoteInterfaceInfo remoteIntfInfo : remoteInterfaceInfos) {
getRemoteInterfaceConnectionSettings(remoteIntfInfo);
if (remoteIntfInfo.hasValidConnectionProperties()) {
// es wurden theoretisch gueltige Connection Properties gefunden
// versuchen, diesen Client zu erreichen
Thread chkConnthread = getConnectionThread(dataInterfaceAdminConsole, remoteIntfInfo, iControlPort);
try {
chkConnthread.start();
} catch (IllegalThreadStateException e) {
// remove Thread from map if not working any longer
checkThreadMap.remove(chkConnthread.getName());
}
}
}
}
}
};
adminConsoleDlg.setSettingsAction(settingsAction);
adminConsoleDlg.setRescanAction(reScanAction);
adminConsoleDlg.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
// main window closed
finish();
exit();
}
});
adminConsoleDlg.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
try {
checkOrCreateDataInterfaceGuiParameters();
} catch (Exception e1) {
LogHandler.log(APPTYPE, ERROR, "gui parameters not created", e1);
JOptionPane.showConfirmDialog(null,
"Application did not create or update all parameters properly.\n" + "Request manufacturer support on this issue",
"Application Failure", JOptionPane.ERROR_MESSAGE);
System.exit(-3);
}
// den eigenen Endpunkt checken und öffnen
try {
iControlPort = adminConsoleConfig.getValue(CONTROL_PORT, Integer.class);
remoteGuiSock = new RemoteGuiSocketAdapter(iControlPort, dataInterfaceAdminConsole);
remoteGuiSock.start();
} catch (Exception e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
loginJob.cancel();
}
});
JOptionPane.showConfirmDialog(null,
"Initial start of this Application\n" + "The application automatically created a number of configuration parameters\n"
+ "Please configure them properly before restarting the client. You will find them in the Workplace, Application, type...",
"Application Hint", JOptionPane.INFORMATION_MESSAGE);
System.exit(-2);
}
// im Hintergrund bereits die Infos zu den Views laden...
Thread initThread = new Thread("Init Thread") {
public void run() {
// alle konfigurierten APP-Ids zum Scope ermitteln
synchronized (syncObject) {
remoteInterfaceInfos = getConfiguredAppIds();
// zu diesen die Konfigurationen ermitteln (Host, Port ect).
for (RemoteInterfaceInfo remoteIntfInfo : remoteInterfaceInfos) {
getRemoteInterfaceConnectionSettings(remoteIntfInfo);
if (remoteIntfInfo.hasValidConnectionProperties()) {
// es wurden theoretisch gueltige Connection Properties gefunden
// versuchen, diesen Client zu erreichen
Thread chkConnthread = getConnectionThread(dataInterfaceAdminConsole, remoteIntfInfo, iControlPort);
try {
chkConnthread.start();
} catch (IllegalThreadStateException e) {
// remove Thread from map if not working any longer
checkThreadMap.remove(chkConnthread.getName());
}
}
}
}
}
};
initThread.start();
}
@Override
public void onLoginCancelled() {
System.exit(-1);
}
public void onLoginSuccess() {
adminConsoleDlg.setVisible(true);
adminConsoleDlg.invalidate();
adminConsoleDlg.repaint();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
@SuppressWarnings("unchecked")
List<String> appIdList = adminConsoleConfig.getValue(OPEN_VIEW_LIST, List.class);
HashSet<String> openViewSet = new HashSet<String>();
if (appIdList != null) {
openViewSet.addAll(appIdList);
}
synchronized (syncObject) {
// diese Daten so weit schon mal im Tablemodel setzen
adminConsoleDlg.setRemoteInterfaceInfo(remoteInterfaceInfos);
// zu diesen die Konfigurationen ermitteln (Host, Port ect).
for (RemoteInterfaceInfo remoteIntfInfo : remoteInterfaceInfos) {
// Tabellendaten updaten
adminConsoleDlg.setRemoteInterfaceInfo(remoteInterfaceInfos);
if (openViewSet.contains(remoteIntfInfo.appid)) {
openView(remoteIntfInfo);
}
}
// Tabellendaten updaten
adminConsoleDlg.setRemoteInterfaceInfo(remoteInterfaceInfos);
}
// Thread starten, der zyklisch nachschaut, ob alle instanzen verfügbar sind
if (!connectionCheckThread.isAlive()) {
connectionCheckThread.start();
}
}
});
}
private boolean checkClientConnection(RemoteInterfaceInfo remoteIntfInfo) {
IRemoteInterface remoteDataInterface = null;
boolean instanceAvailable = false;
try {
remoteDataInterface = remoteIntfInfo.getConnection();
InetAddress addr = InetAddress.getLocalHost();
if (remoteDataInterface == null) {
return false;
}
String hostname = addr.getHostName();
remoteDataInterface.setGuiConsoleProperties(hostname, iControlPort);
remoteIntfInfo.lastUpdated = new Date();
remoteIntfInfo.title = remoteDataInterface.getTitle(null);
remoteIntfInfo.instanceInfos = remoteDataInterface.getInstanceInfos();
remoteIntfInfo.type = remoteDataInterface.getStartType();
instanceAvailable = true;
} catch (IOException e1) {
LogHandler.log(APPTYPE, ERROR, "client " + remoteIntfInfo.appid + " not reachable, connection refused");
// Connection problem
remoteIntfInfo.lastUpdated = new Date();
remoteIntfInfo.instanceInfos = null;
remoteIntfInfo.title = "";
remoteIntfInfo.type = InterfaceStartType.UNKNOWN;
if (dataInterfaceDlgMap.containsKey(remoteIntfInfo.appid)) {
closeView(remoteIntfInfo.appid);
}
} finally {
if (remoteDataInterface != null) {
remoteDataInterface.shutdown();
}
}
return instanceAvailable;
}
// aus der Konfigurationn zu den einzelnen Interfacen die Connection-Properties laden
private void getRemoteInterfaceConnectionSettings(RemoteInterfaceInfo remoteIntfInfo) {
LogHandler.log(LOGGER, INFO, "get connection settings for remote interface with appid: " + remoteIntfInfo.appid);
KeyValue[] options = new KeyValue[] { new KeyValue(CONFIG_ADMIN.name(), "JLPMHRGGEDKO") };
KeyValue[] configContext = new KeyValue[] { new KeyValue(CONFIG_APPTYPE.name(), DataInterface.APPTYPE),
new KeyValue(CONFIG_CLUSTER.name(), LocatorFactory.getLocator().getClusterName()),
new KeyValue(CONFIG_APPID.name(), remoteIntfInfo.appid) };
KeyValue[] parameterFilterPort = new KeyValue[] { new KeyValue(PARAMETER_NAME.name(), RemoteLocation.PORT) };
KeyValue[] parameterFilterHost = new KeyValue[] { new KeyValue(PARAMETER_NAME.name(), RemoteLocation.HOSTNAME) };
String[] paramResultKeys = new String[0];
String[] resultKeys = ImsApiTools.getKeys(CONFIG_VALUE);
Result_configGetValues configDimValues = adminConsoleConfig.getImsApiService().configGetValues(
adminConsoleConfig.getImsSessionContext(), options, configContext, parameterFilterPort, paramResultKeys, resultKeys);
if (configDimValues != null && configDimValues.resultValues != null && configDimValues.resultValues.length > 0) {
remoteIntfInfo.port = Integer.parseInt(configDimValues.resultValues[0]);
} else {
remoteIntfInfo.port = -1;
}
Result_configGetValues configDimValuesHost = adminConsoleConfig.getImsApiService().configGetValues(
adminConsoleConfig.getImsSessionContext(), options, configContext, parameterFilterHost, paramResultKeys, resultKeys);
if (configDimValuesHost != null && configDimValuesHost.resultValues != null && configDimValuesHost.resultValues.length > 0) {
remoteIntfInfo.host = configDimValuesHost.resultValues[0];
} else {
remoteIntfInfo.host = null;
}
}
protected void exit() {
System.exit(0);
}
/**
* @return all available DimValues for AppType Data Interface
*/
private List<RemoteInterfaceInfo> getConfiguredAppIds() {
List<RemoteInterfaceInfo> retList = new ArrayList<RemoteInterfaceInfo>();
KeyValue[] options = new KeyValue[] { new KeyValue(PARAMETER_SCOPE.name(), DataInterface.APPTYPE) };
KeyValue[] dimensionFilter = new KeyValue[] { new KeyValue(CONFIG_APPID.name(), "*") };
Result_configGetDimensionValues configDimValues = adminConsoleConfig.getImsApiService()
.configGetDimensionValues(adminConsoleConfig.getImsSessionContext(), options, dimensionFilter);
if (configDimValues != null && configDimValues.resultValues != null && configDimValues.resultValues.length > 0) {
for (String value : configDimValues.resultValues) {
RemoteInterfaceInfo ris = new RemoteInterfaceInfo();
ris.appid = value;
retList.add(ris);
}
}
return retList;
}
public void finish() {
saveOpenViews();
try {
// close all open connections
// save window position
saveWindowPositions();
} catch (Exception e) {
LogHandler.log(APPTYPE, ERROR, "unable to update window position in configuration", 1);
}
}
/**
* save all appids for all currently open views to configuration; if any exception occures logs and ignore them
*/
private void saveOpenViews() {
try {
// save list with all open appids
List<String> openAppIds = new ArrayList<String>();
openAppIds.addAll(dataInterfaceDlgMap.keySet());
adminConsoleConfig.updateParameterValue(OPEN_VIEW_LIST, openAppIds);
} catch (Exception e) {
LogHandler.log(APPTYPE, ERROR, "unable to store all currently open views", e);
}
}
/**
* zentraqler Eingang von Benachrichtigungen über Zustandsänderungen der MenuItems. diese müssen von hier aus an die
* Dialoge/Menues weiter verteilt werden.
*/
@Override
public synchronized void notifyActionPropertiesChanged(String appId, String instanceName, DataInterfaceMenuAction action) {
// incoming calls from gui-less interface, delegate them to the corresponding view
LogHandler.log(APPTYPE, DEBUG, "properties changed by gui-less interface '" + appId + "' : " + action);
DataInterfaceConsoleDlg dataInterfaceDlg = getDataInterfaceDlg(appId);
if (dataInterfaceDlg != null) {
dataInterfaceDlg.setActionProperties(action, instanceName);
}
}
// den entsprechenden Dialog zu dieser AppId finden
private DataInterfaceConsoleDlg getDataInterfaceDlg(String appId) {
if (dataInterfaceDlgMap == null) {
LogHandler.log(APPTYPE, INFO, "no data interface available in map");
return null;
}
DataInterfaceConsoleDlg dlg = dataInterfaceDlgMap.get(appId);
if (dlg == null) {
LogHandler.log(APPTYPE, INFO, "data interface with appid " + appId + " not found in map");
}
return dlg;
}
@Override
public synchronized void addMessage(String appId, String instanceName, LogLevel level, boolean append, String text) {
// incoming calls from gui-less interface, delegate them to the corresponding view
LogHandler.log(APPTYPE, DEBUG, "addMessage received from gui-less interface '" + appId + "', instance '" + instanceName + "'");
// die entsprechende view finden
IWorkerPane pane = getWorkerPane(appId, instanceName);
if (pane != null) {
pane.addMessage(instanceName, level, append, text);
}
}
private IWorkerPane getWorkerPane(String appId, String instanceName) {
DataInterfaceConsoleDlg dataInterfaceDlg = getDataInterfaceDlg(appId);
if (dataInterfaceDlg == null) {
LogHandler.log(APPTYPE, WARN, "view for appid " + appId + " not found");
return null;
}
IWorkerPane pane = dataInterfaceDlg.getOrCreateWorkerPane(instanceName);
if (pane == null) {
LogHandler.log(APPTYPE, WARN, "pane " + instanceName + " for appid " + appId + " not found");
return null;
}
return pane;
}
@Override
public synchronized void addMessage(String appId, String instanceName, LogLevel level, String text) {
// incoming calls from gui-less interface, delegate them to the corresponding view
addMessage(appId, instanceName, level, false, text);
}
@Override
public void clear(String appId, String instanceName) {
// incoming calls from gui-less interface, delegate them to the corresponding view
LogHandler.log(APPTYPE, DEBUG, "clear received from gui-less interface '" + appId + "', instance '" + instanceName + "'");
IWorkerPane pane = getWorkerPane(appId, instanceName);
if (pane != null) {
pane.clear();
}
}
@Override
public void fireMenuItem(final DataInterfaceMenuAction menuItem) {
// dieses Ereignis per IHAp an das Interface delegieren
IRemoteInterface connection = null;
try {
RemoteInterfaceInfo remoteInterfaceInfo = getRemoteInterface(menuItem.getAppid());
if (remoteInterfaceInfo == null) {
LogHandler.log(APPTYPE, ERROR, "remote interface not available");
return;
}
//
connection = remoteInterfaceInfo.getConnection();
if (connection == null) {
LogHandler.log(APPTYPE, ERROR, "remote interface available but not connected");
return;
}
connection.fireMenuItem(menuItem);
} catch (Exception e) {
LogHandler.log(APPTYPE, ERROR, "menu item not fired because remote interface not available", e);
} finally {
if (connection != null) {
connection.shutdown();
}
}
}
private RemoteInterfaceInfo getRemoteInterface(String appid) {
for (RemoteInterfaceInfo remoteIntf : remoteInterfaceInfos) {
if (remoteIntf.appid.equals(appid)) {
return remoteIntf;
}
}
return null;
}
protected void saveWindowPositions() {
LogHandler.log(LOGGER, INFO, "get and store main window position/size");
AdminConsoleWindowSettings wds = adminConsoleConfig.getValue(WINDOW_SETTINGS, AdminConsoleWindowSettings.class);
if (wds == null) {
wds = new AdminConsoleWindowSettings();// enthaelt bereits default-Werte
}
wds.left = adminConsoleDlg.getX();
wds.top = adminConsoleDlg.getY();
wds.width = adminConsoleDlg.getWidth();
wds.height = adminConsoleDlg.getHeight();
adminConsoleConfig.updateParameterValue(WINDOW_SETTINGS, wds);
}
/**
* Diese Methode wird am Remote-caller aufgerufen, steuert aber nur die IHap-Kommunikation und kommt nie bis zum Call-Empfaenger
* durch.
*/
@Override
public void setChannelName(String name) {
// Methode bleibt leer
}
/**
* Diese Methode wird am Remote-caller aufgerufen, steuert aber nur die IHap-Kommunikation und kommt nie bis zum Call-Empfaenger
* durch.
*/
@Override
public void shutdown() {
// Methode bleibt leer
}
public void openInterfaceConsoleDialog(RemoteInterfaceInfo remoteIntfInfo) {
if (!checkClientConnection(remoteIntfInfo)) {
return;
}
adminConsoleDlg.setStatus(ResourcePool.getInstance().getMessage(ResourcesIMSInterfaces.OPENING_INSTANCE, remoteIntfInfo.appid));
final DataInterfaceConsoleDlg dataInterfaceDlg = new DataInterfaceConsoleDlg();
// dataInterfaceDlg.setGuiConsole(dataInterfaceAdminConsole);
// dataInterfaceDlg.addWindowListener(closeViewListener);
dataInterfaceDlg.addComponentListener(componentListener);
try {
IRemoteInterface remoteDataInterface = remoteIntfInfo.getConnection();
// Initialierung des Remote-Interface ist nun vollstaendig !!
readDialogSettings(dataInterfaceDlg, remoteIntfInfo.appid);
dataInterfaceDlg.setVisible(true);
dataInterfaceDlg.setTitle(remoteDataInterface.getTitle(null));
// Infos von der Remote-Schnittstelle laden...
String mainTab = remoteDataInterface.getMainTab();
LogHandler.log(APPTYPE, INFO, "found main Tab " + mainTab);
IWorkerPane mainPane = dataInterfaceDlg.getOrCreateWorkerPane(mainTab);
List<DataInterfaceMenuAction> mnuMainActions = remoteDataInterface.getActions(mainTab);
// wenn eine dieser Actions ausgeloest wird muss diese Info an diese Instanz (remoteDataInterface)
// weitergeleitet werden
if (mnuMainActions != null) {
// Aktionen, die Worker-uebergreifend sind (startAll, stopAll);
for (DataInterfaceMenuAction dataInterfaceMenuAction : mnuMainActions) {
dataInterfaceMenuAction.setInstanceName(mainTab);
dataInterfaceMenuAction.setAppid(remoteIntfInfo.appid);
dataInterfaceMenuAction.addSimulationMessageReceiver(this);
dataInterfaceMenuAction.setEnabled(true);
}
mainPane.setMenuItems(mnuMainActions);
}
mainPane.setDescription(remoteDataInterface.getDescription(mainTab));
mainPane.setTitle(remoteDataInterface.getTitle(mainTab));
dataInterfaceDlg.createWorkerView(mainPane, mnuMainActions);
List<InstanceMessage> mainMessages = remoteDataInterface.getInstanceMessages(mainTab);
// diese Messages in der View darstellen;
if (mainMessages != null && mainMessages.size() > 0) {
for (InstanceMessage instanceMessage : mainMessages) {
mainPane.addMessage(mainTab, instanceMessage.getLevel(), instanceMessage.getMessage());
}
}
List<InstanceInfo> instances = remoteIntfInfo.instanceInfos;
// alle Fenster der Reihe nach erstellen
for (InstanceInfo instanceInfo : instances) {
String instName = instanceInfo.getInstanceName();
try {
LogHandler.log(APPTYPE, INFO, "found instance " + instName);
IWorkerPane workerPane = dataInterfaceDlg.getOrCreateWorkerPane(instName);
List<DataInterfaceMenuAction> mnuActions = remoteDataInterface.getActions(instName);
// wenn eine dieser Actions ausgeloest wird muss diese Info an diese Instanz (remoteDataInterface)
// weitergeleitet werden
for (DataInterfaceMenuAction dataInterfaceMenuAction : mnuActions) {
dataInterfaceMenuAction.setInstanceName(instName);
dataInterfaceMenuAction.setAppid(remoteIntfInfo.appid);
dataInterfaceMenuAction.addSimulationMessageReceiver(this);
}
workerPane.setMenuItems(mnuActions);
workerPane.setDescription(remoteDataInterface.getDescription(instName));
dataInterfaceDlg.createWorkerView(workerPane, mnuActions);
List<InstanceMessage> messages = remoteDataInterface.getInstanceMessages(instName);
// diese Messages in der View darstellen;
if (messages != null && messages.size() > 0) {
for (InstanceMessage instanceMessage : messages) {
workerPane.addMessage(mainTab, instanceMessage.getLevel(), instanceMessage.getMessage());
}
}
} catch (Exception e) {
LogHandler.log(APPTYPE, ERROR, "instance " + instName + " not created properly");
}
}
dataInterfaceDlg.setRemoteInterface(remoteDataInterface);
dataInterfaceDlg.setRemoteInterfaceInfo(remoteIntfInfo);
} catch (IOException e1) {
// Connection problem
remoteIntfInfo.lastUpdated = new Date();
remoteIntfInfo.instanceInfos = null;
remoteIntfInfo.title = "";
// evtl. aus der Liste der offenen Instanzen loeschen.
dataInterfaceDlgMap.remove(remoteIntfInfo.appid);
return;
}
dataInterfaceDlgMap.put(remoteIntfInfo.appid, dataInterfaceDlg);
}
@Override
public void finish(String appid) {
}
@Override
public void openView(RemoteInterfaceInfo rmio) {
// gibt es bereits einen Dialog zu diesem rmio
DataInterfaceConsoleDlg dlg = dataInterfaceDlgMap.get(rmio.appid);
if (dlg != null) {
if (!dlg.isVisible()) {
// anzeigen wenn verborgen
dlg.setVisible(true);
}
return;
}
openInterfaceConsoleDialog(rmio);
}
public void updateView(RemoteInterfaceInfo remoteIntfInfo) {
// die connection Parameter fuer diese View Updaten
adminConsoleDlg.updateRemoteInterfaceInfo(remoteIntfInfo);
}
public void closeView(String appid) {
// Remote Interface informieren dass die GUI beendet wird
DataInterfaceConsoleDlg dlg = dataInterfaceDlgMap.get(appid);
if (dlg == null) {
return;
}
// Wert zum Interface mit der entsprechenden APP-Id speichern
saveDialogSettings(dlg, appid);
dlg.setVisible(false);
try {
dlg.getRemoteDataInterface().setGuiConsoleProperties("", 0);
} catch (Exception e) {
adminConsoleDlg.setStatus(ResourcePool.getInstance().getMessage(ResourcesIMSInterfaces.INSTANCE_CLOSED, appid));
}
dataInterfaceDlgMap.remove(appid);
}
public void checkOrCreateDataInterfaceGuiParameters() throws Exception {
// gibt es den Interface - Root-Parameter?
KeyValue scope = new KeyValue(ImsApiKey.PARAMETER_SCOPE.name(), DataInterface.APPTYPE);
List<Parameter> interfaceRootParamList = adminConsoleConfig.getScopeParameters(scope);
// nein, dann ENDE
if (interfaceRootParamList == null) {
throw new Exception("No DataInterface Parameter found at all");
}
Hashtable<String, Parameter> declaredParameters = new Hashtable<String, Parameter>();
// check for parameter window.position
boolean found = false;
Parameter rootParam = null;
for (Parameter p : interfaceRootParamList) {
if (p.getName().equals(WindowSettings.WINDOW_POSITION)) {
found = true;
}
if (p.getName().equals(".version")) {
rootParam = p;
}
}
Parameter windowParam = declaredParameters.get(WindowSettings.WINDOW_POSITION);
if (!found) {
windowParam.setScope(scope);
windowParam.setParentId(rootParam.getId());
windowParam = adminConsoleConfig.insertParameter(windowParam);
} else {
for (Parameter p : interfaceRootParamList) {
if (p.getName().equals(WindowSettings.WINDOW_POSITION)) {
windowParam = p;
break;
}
}
}
// gibt es den window.position parameter
found = false;
for (Parameter p : interfaceRootParamList) {
if (p.getName().equals(WindowSettings.WINDOW_POSITION)) {
windowPositionParameter = p;
found = true;
break;
}
}
if (!found) {
windowPositionParameter = declaredParameters.get(WindowSettings.WINDOW_POSITION);
windowPositionParameter.setScope(scope);
windowPositionParameter.setParentId(windowParam.getId());
windowPositionParameter = adminConsoleConfig.insertParameter(windowPositionParameter);
}
}
private void saveDialogSettings(DataInterfaceConsoleDlg dlg, String appid) {
try {
Rectangle r = dlg.getRectangle();
LogHandler.log(APPTYPE, INFO, "updating position to " + dlg.getRemoteInterfaceInfo().appid);
adminConsoleConfig.updateParameterValue(windowPositionParameter, DataInterface.APPTYPE, appid, r);
} catch (Exception e) {
// update der Position konnte nicht ausgeführt werden.
LogHandler.log(APPTYPE, ERROR, "updating position for dialog " + dlg.getRemoteInterfaceInfo().appid + " failed", e);
}
}
private void readDialogSettings(DataInterfaceConsoleDlg dlg, String appid) {
try {
KeyValue scope = new KeyValue(ImsApiKey.PARAMETER_SCOPE.name(), DataInterface.APPTYPE);
Parameter windowParam = adminConsoleConfig.getDataInterfaceParameter(scope, WindowSettings.WINDOW_POSITION);
Rectangle r = adminConsoleConfig.getParameterValue(windowParam, scope, DataInterface.APPTYPE, appid);
dlg.setBounds(r.left, r.top, r.width, r.height);
} catch (Exception e) {
// lesen der Position konnte nicht ausgeführt werden.
LogHandler.log(APPTYPE, ERROR, "reading position for dialog " + appid + " failed", e);
}
}
}

View File

@@ -0,0 +1,95 @@
/*
* Copyright (c) 2014 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface.control;
import static com.itac.util.logging.LogLevel.DEBUG;
import static com.itac.util.logging.LogLevel.ERROR;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.SwingUtilities;
import com.itac.mes.datainterface.gui.DataInterfaceLoginDlg;
import com.itac.mes.datainterface.service.LoginService;
import com.itac.util.logging.LogHandler;
public class LoginJob implements Runnable {
private static final String LOGGER = LoginJob.class.getSimpleName();
private DataInterfaceLoginDlg loginDialog;
private LoginListener loginListener;
private LoginService loginService;
public LoginJob(final LoginListener loginListener, LoginService loginService) {
this.loginListener = loginListener;
this.loginService = loginService;
loginDialog = new DataInterfaceLoginDlg();
loginDialog.pack();
loginDialog.getOkBtn().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
run();
}
});
loginDialog.getCancelBtn().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (loginListener != null) {
loginListener.onLoginCancelled();
}
}
});
}
public void cancel() {
if (loginDialog != null) {
loginDialog.setVisible(false);
}
}
@Override
public void run() {
try {
loginDialog.getLoginStatusLabel().setText("wait for login");
String client = loginDialog.getClientField().getText();
String user = loginDialog.getUserField().getText();
String password = String.valueOf(loginDialog.getPasswordField().getPassword());
String loginResult = loginService.login(user, password, client);
if (loginResult != null && loginResult.length() > 0) {
loginDialog.getLoginStatusLabel().setText(loginResult);
return;
}
loginDialog.dispose();
if (loginListener != null) {
loginListener.onLoginSuccess();
}
} catch (Throwable th) {
LogHandler.log(LOGGER, ERROR, "login failed!", th);
}
}
public void show() {
LogHandler.log(LOGGER, DEBUG, "startLogin");
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
loginDialog.setVisible(true);
}
});
}
}

View File

@@ -0,0 +1,14 @@
/*
* Copyright (c) 2014 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface.control;
public interface LoginListener {
public void onLoginSuccess();
public void onLoginCancelled();
}

View File

@@ -0,0 +1,8 @@
package com.itac.mes.datainterface.data;
public class Settings {
public boolean validConfigurationsOnly = false;
public boolean changed;
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright (c) 2013 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface.gui;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JPanel;
import com.itac.resource.ResourcePool;
import com.itac.resource.ResourcesIMSInterfacesImages;
/**
* @author frankp
*
*/
public class BackgroundPanel extends JPanel {
private transient Image imageOrg = null;
private transient Image image = null;
{
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
final int w = BackgroundPanel.this.getWidth();
final int h = BackgroundPanel.this.getHeight();
image = w > 0 && h > 0 ? imageOrg.getScaledInstance(w, h, Image.SCALE_SMOOTH) : imageOrg;
BackgroundPanel.this.repaint();
}
});
}
/**
* Creates new form Header
*/
public BackgroundPanel() {
imageOrg = ResourcePool.getInstance().getImage(ResourcesIMSInterfacesImages.BLUE_GRADIENT_BACKGROUND);
image = ResourcePool.getInstance().getImage(ResourcesIMSInterfacesImages.BLUE_GRADIENT_BACKGROUND);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
g.drawImage(image, 0, 0, null);
}
}
}

View File

@@ -0,0 +1,201 @@
/*
* Copyright (c) 2013 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface.gui;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import com.itac.mes.datainterface.ColorCellRenderer;
import com.itac.mes.datainterface.RemoteInterfaceInfo;
import com.itac.mes.datainterface.RemoteInterfaceTableModel;
import com.itac.mes.datainterface.data.Settings;
import com.itac.resource.ResourcePool;
import com.itac.resource.ResourcesIMSInterfaces;
import com.itac.resource.ResourcesImages;
import com.itac.resource.ResourcesInterfaceFramework;
import com.jgoodies.layout.layout.ColumnSpec;
import com.jgoodies.layout.layout.FormLayout;
import com.jgoodies.layout.layout.FormSpecs;
import com.jgoodies.layout.layout.RowSpec;
public class DataInterfaceAdminConsoleDlg extends JFrame {
private RemoteInterfaceTableModel tableModel = new RemoteInterfaceTableModel();
private JTable table;
private OpenViewListener onOpenViewListener;
private JLabel lblStatus;
private JMenuItem mntmSettings;
private JMenuItem mntmRescan;
private Settings settings;
public DataInterfaceAdminConsoleDlg() {
try {
setIconImage(ResourcePool.getInstance().getImage(ResourcesImages.ICON_MES));
} catch (Exception npe) {
// ignore problems when setting Icon
}
setTitle("DataInterface Admin Console");
getContentPane().setLayout(
new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"),
FormSpecs.LABEL_COMPONENT_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC,
FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"),
FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.LINE_GAP_ROWSPEC, }));
table = new JTable();
table.setBorder(null);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(false);
table.setModel(tableModel);
table.getTableHeader().setResizingAllowed(true);
table.getTableHeader().setReorderingAllowed(false);
table.getColumnModel().getColumn(0).setPreferredWidth(119);
table.getColumnModel().getColumn(1).setPreferredWidth(92);
table.getColumnModel().getColumn(4).setPreferredWidth(113);
table.setDefaultRenderer(JLabel.class, new ColorCellRenderer());
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
doCopy();
}// end actionPerformed(ActionEvent)
};
final KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK, false);
table.registerKeyboardAction(listener, "Copy", stroke, JComponent.WHEN_FOCUSED);
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
Point p = e.getPoint();
int row = table.rowAtPoint(p);
RemoteInterfaceInfo rmio = tableModel.getData(row);
if (onOpenViewListener != null) {
onOpenViewListener.openView(rmio);
}
}
}
});
JLabel lblNewLabel = ComponentFactory.createLabel("Interface Overview", ResourcesIMSInterfaces.INTERFACE_OVERVIEW);
getContentPane().add(lblNewLabel, "2, 2");
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBorder(null);
getContentPane().add(scrollPane, "2, 4, fill, fill");
lblStatus = new JLabel("");
getContentPane().add(lblStatus, "2, 6, fill, top");
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu mnNewMenu = ComponentFactory.createMenu(ResourcePool.getInstance().getString(ResourcesInterfaceFramework.INTERFACEFRAMEWORK_MENU_FILE), -1, KeyEvent.VK_F);
menuBar.add(mnNewMenu);
mntmSettings = new JMenuItem("NLS Settings");
mntmSettings.setMnemonic(KeyEvent.VK_S);
mntmRescan = new JMenuItem("NLS RESCAN");
mntmRescan.setMnemonic(KeyEvent.VK_R);
mnNewMenu.add(mntmSettings);
mnNewMenu.add(mntmRescan);
JMenuItem mntmExit = ComponentFactory.createMenuItem("Exit", -1, 0);
mntmExit.setAction(new AbstractAction(ResourcePool.getInstance().getString(ResourcesIMSInterfaces.MNU_EXIT)) {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
mntmExit.setMnemonic(KeyEvent.VK_X);
mnNewMenu.add(mntmExit);
}
private void doCopy() {
int row = table.getSelectedRow();
if (row != -1) {
RemoteInterfaceInfo value = tableModel.getData(row);
String data = value.appid;
final StringSelection selection = new StringSelection(data);
final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
}// end if
}// end doCopy()
public void setRemoteInterfaceInfo(List<RemoteInterfaceInfo> remoteInterfaceInfos) {
int selectedIndex = table.getSelectedRow();
tableModel.setShowValidConfigurationsOnly(settings.validConfigurationsOnly);
tableModel.setData(remoteInterfaceInfos);
if (selectedIndex >= 0) {
table.getSelectionModel().setSelectionInterval(selectedIndex, selectedIndex);
}
}
public void setOnOpenViewListener(OpenViewListener openViewListener) {
this.onOpenViewListener = openViewListener;
}
public void setStatus(final String status) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
lblStatus.setText(status);
}
});
}
public void setSettingsAction(AbstractAction settingsAction) {
mntmSettings.setAction(settingsAction);
}
public void setRescanAction(AbstractAction rescanAction) {
mntmRescan.setAction(rescanAction);
}
public void setSettings(Settings settings) {
this.settings = settings;
tableModel.setShowValidConfigurationsOnly(settings.validConfigurationsOnly);
}
public void updateRemoteInterfaceInfo(RemoteInterfaceInfo remoteIntfInfo) {
tableModel.updateRemoteInterfaceInfo(remoteIntfInfo);
}
}

View File

@@ -0,0 +1,566 @@
/*
* Copyright (c) 2013 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface.gui;
import static com.itac.mes.datainterface.gui.ComponentFactory.createMenuItem;
import static com.itac.resource.ResourcesIMSInterfaces.CLOSE_VIEW;
import static com.itac.resource.ResourcesIMSInterfaces.REALLY_SHUTDOWN;
import static com.itac.resource.ResourcesIMSInterfaces.SHUTDOWN_TITLE;
import static com.itac.resource.ResourcesInterfaceFramework.INTERFACEFRAMEWORK_MENU_EXIT;
import static com.itac.resource.ResourcesInterfaceFramework.INTERFACEFRAMEWORK_MENU_FILE;
import static com.itac.resource.ResourcesInterfaceFramework.SIMULATIONS;
import static com.itac.resource.ResourcesInterfaceFramework.WINDOW;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.Hashtable;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.border.EmptyBorder;
import com.itac.mes.clientframe.presentation.JTopPanel;
import com.itac.mes.datainterface.DataInterface;
import com.itac.mes.datainterface.DataInterfaceAdminConsole;
import com.itac.mes.datainterface.RemoteInterfaceInfo;
import com.itac.mes.datainterface.VersionInfo;
import com.itac.mes.datainterface.data.InterfaceStartType;
import com.itac.mes.datainterface.data.Rectangle;
import com.itac.mes.datainterface.ihap.IRemoteGui;
import com.itac.mes.datainterface.ihap.IRemoteInterface;
import com.itac.resource.ResourcePool;
import com.itac.resource.ResourcesImages;
import com.itac.util.logging.LogHandler;
import com.itac.util.logging.LogLevel;
/**
* Diese Klasse ist die visuelle Darstellung zum RemoteDialog
*
* @author frankp
*
*/
public class DataInterfaceConsoleDlg extends JFrame implements IMainDlg {
public static final String INTERFACE_TAB_NAME = "Interface";
private static final long serialVersionUID = -7081052036265722600L;
private static final String LOGGER = DataInterfaceConsoleDlg.class.getSimpleName();
private AbstractAction exitGuiConsole = new AbstractAction("exitGuiConsole") {
@Override
public void actionPerformed(ActionEvent e) {
exitApplication();
}
};
private AbstractAction closeViewGuiConsole = new AbstractAction("closeViewGuiConsole") {
@Override
public void actionPerformed(ActionEvent e) {
closeViewRequest();
}
};
private Hashtable<String, IWorkerPane> availableViews = new Hashtable<String, IWorkerPane>();
private JPanel jContentPane;
private JTopPanel pnlTop;
private JMenuBar menubar;
private JMenu mnuFile;
private JMenuItem mniExit;
private JMenu mniWindow;
private JMenu mnuSimulations;
private JMenuItem mnicloseView;
private String mainPaneName;
private transient IWorker worker = new RemoteWorker();
private IWorker simulation;
private IRemoteInterface remoteDataInterface;
private RemoteInterfaceInfo remoteInterfaceInfo;
private JTabbedPane mainTabPane;
private JTabbedPane simulationTabPane;
/**
* This is the default constructor
*/
public DataInterfaceConsoleDlg() {
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
setJMenuBar(getMenubar());
setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
try {
setIconImage(ResourcePool.getInstance().getImage(ResourcesImages.ICON_ITAC_LOGO));
} catch (NullPointerException npe) {
}
setTitle("Data Interface Gui Console");
setContentPane(getJContentPane());
this.setSize(600, 300);
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel(new BorderLayout());
jContentPane.add(getPnlTop(), BorderLayout.NORTH);
jContentPane.setBackground(SystemColor.window);
jContentPane.setForeground(SystemColor.window);
jContentPane.setOpaque(true);
jContentPane.setBorder(new EmptyBorder(0, 0, 0, 0));
mainTabPane = new JTabbedPane(JTabbedPane.TOP);
mainTabPane.setBackground(SystemColor.window);
mainTabPane.setOpaque(true);
mainTabPane.setBorder(new EmptyBorder(0, 0, 0, 0));
jContentPane.add(mainTabPane, BorderLayout.CENTER);
}
return jContentPane;
}
/**
* (non-Javadoc) if the level is less than 0 text is appended to the last line!
*
* @param level
* @param message
* @see com.itac.mes.datainterface.data.MessageListener#addMessage(int, java.lang.String)
*/
@Override
public void addMessage(String instance, LogLevel level, String message) {
for (int i = 0; i < mainTabPane.getTabCount(); i++) {
Component component = mainTabPane.getTabComponentAt(i);
if (component instanceof WorkerPane) {
((WorkerPane) component).addMessage(instance, level, false, message);
}
}
}
/**
* This method initializes jTopPanel
*
* @return com.itac.oem.client.gui.JTopPanel
*/
private JTopPanel getPnlTop() {
if (pnlTop == null) {
pnlTop = new JTopPanel();
// fester Title, zumindest so,lange bis das Interface gestartet ist und ein neuer Titel gesetzt wird...
pnlTop.setTitle("Data Interface");
try {
pnlTop.setIcon(ResourcePool.getInstance().getImageIcon(ResourcesImages.ITAC_RGB_NOINTERLACED));
} catch (NullPointerException npe) {
}
pnlTop.setSubTitle(VersionInfo.getVersion());
LogHandler.log(LOGGER, LogLevel.INFO, VersionInfo.getCompleteVersion());
}
return pnlTop;
}
@Override
public void setTitle(String title) {
super.setTitle(title);
getPnlTop().setTitle(title);
}
/**
* This method initializes menubar
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getMenubar() {
if (menubar == null) {
menubar = new JMenuBar();
menubar.add(getMnuFile());
menubar.add(getMniWindow());
menubar.add(getMnuSimulations());
}
return menubar;
}
/**
* This method initializes mnuFile
*
* @return javax.swing.JMenu
*/
private JMenu getMnuFile() {
if (mnuFile == null) {
mnuFile = new JMenu();
mnuFile.setText(ResourcePool.getInstance().getString(INTERFACEFRAMEWORK_MENU_FILE));
mnuFile.add(getMniCloseView()); // eingefuegt mit index 2
mnuFile.add(getMniExit()); // eingefuegt mit index 3
}
return mnuFile;
}
/**
* This method initializes mniExit
*
* @return javax.swing.JMenuItem
*/
public JMenuItem getMniExit() {
if (mniExit == null) {
mniExit = createMenuItem("mniExit", INTERFACEFRAMEWORK_MENU_EXIT, -1);
exitGuiConsole.putValue(Action.NAME, ResourcePool.getInstance().getString(INTERFACEFRAMEWORK_MENU_EXIT));
mniExit.setAction(exitGuiConsole);
}
return mniExit;
}
/**
* This method initializes mniExit
*
* @return javax.swing.JMenuItem
*/
public JMenuItem getMniCloseView() {
if (mnicloseView == null) {
mnicloseView = createMenuItem("mniCloseView", -1, -1);
closeViewGuiConsole.putValue(Action.NAME, ResourcePool.getInstance().getString(CLOSE_VIEW));
mnicloseView.setAction(closeViewGuiConsole);
}
return mnicloseView;
}
/**
* Fehler beim Initialisieren der Worker, also Tab mit den Initialisierungsmeldungen anzeigen
*/
@Override
public void initFailure() {
IDataInterfaceView view = getViewForTitle(INTERFACE_TAB_NAME);
if (view != null) {
((JComponent) view).setVisible(true);
return;
}
}
/**
* @param title
* @return
*/
protected IDataInterfaceView getViewForTitle(String title) {
for (int i = 0; i < mainTabPane.getTabCount(); i++) {
Component component = mainTabPane.getTabComponentAt(i);
if (component instanceof WorkerPane) {
WorkerPane wp = ((WorkerPane) component);
if (wp.getTitle().equals(INTERFACE_TAB_NAME)) {
return (IDataInterfaceView) wp;
}
}
}
return null;
}
@Override
public void addMessage(String instance, LogLevel level, boolean append, String text) {
addMessage(instance, level, text);
}
/**
* This method initializes mniWindow
*
* @return javax.swing.JMenu
*/
private JMenu getMniWindow() {
if (mniWindow == null) {
mniWindow = new JMenu();
mniWindow.setText(ResourcePool.getInstance().getString(WINDOW));
mniWindow.setVisible(false);
}
return mniWindow;
}
/**
* This method initializes mnuSimulations
*
* @return javax.swing.JMenu
*/
private JMenu getMnuSimulations() {
if (mnuSimulations == null) {
mnuSimulations = new JMenu();
mnuSimulations.setText(ResourcePool.getInstance().getString(SIMULATIONS));
mnuSimulations.setVisible(false);
}
return mnuSimulations;
}
@Override
/**
* Es wird eine Seite erzeugt, die den entsprechenden Title hat. Die graph. Repräsentation ist mit der Annotation
* definiert. Es werden auch die entsprechenden Menues definiert !!!!
*/
public IWorkerPane createMachineView(IMachineSimulation machineSimulation, String simulationClass,
Collection<DataInterfaceMenuAction> mnuItemString) {
if (simulationTabPane ==null){
// create on demand
simulationTabPane = new JTabbedPane(JTabbedPane.TOP);
simulationTabPane.setBackground(Color.RED);
simulationTabPane.setOpaque(true);
simulationTabPane.setBorder(new EmptyBorder(0, 0, 0, 0));
jContentPane.add(simulationTabPane, BorderLayout.EAST);
}
IWorkerPane machineSimPane = machineSimulation.getWorkerPane();
try {
if (machineSimulation.getWorkerPane() == null) {
machineSimPane = GuiFactory.getMachineSimulationPane(Class.forName(simulationClass), machineSimulation.getInstanceName());
}
if (machineSimPane != null) {
if (machineSimPane instanceof IDataInterfaceView) {
simulationTabPane.addTab(machineSimPane.getTitle(), (JComponent) machineSimPane);
}
availableViews.put(machineSimPane.getTitle(), machineSimPane);
}
} catch (ClassNotFoundException e1) {
LogHandler.log(LOGGER, LogLevel.ERROR, "class not found for name " + simulationClass, e1);
}
JMenuItem mi = new JMenuItem(machineSimulation.getInstanceName());
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String title = ((JMenuItem) e.getSource()).getText();
IDataInterfaceView view = getViewForTitle(title);
if (view != null) {
((JComponent) view).setVisible(true);
return;
}
// neue Worker View erzeugen
IWorkerPane component = availableViews.get(title);
if (component instanceof IDataInterfaceView) {
// dataInterfaceDoggy.createDockedView((IDataInterfaceView) component);
}
}
});
mniWindow.add(mi);
mniWindow.setVisible(true);
if (machineSimPane != null) {
machineSimPane.setMenuItems(machineSimulation.getMenuItems());
machineSimPane.setMachineSimulation(machineSimulation);
}
JMenu mnuSim = new JMenu(machineSimulation.getInstanceName());
mnuSimulations.add(mnuSim);
mnuSimulations.setVisible(true);
if (mnuItemString != null && mnuItemString.size() > 0) {
for (DataInterfaceMenuAction string : mnuItemString) {
mnuSim.add(new JMenuItem(new WorkerAction(string, simulation, machineSimPane)));
}
}
return machineSimPane;
}
@Override
public void createWorkerView(IWorkerPane workerPane, List<DataInterfaceMenuAction> menuItems) {
if (workerPane instanceof IDataInterfaceView) {
mainTabPane.addTab(workerPane.getTitle(), (JComponent) workerPane);
}
// für jeden Worker wird ein Submenu erzeugt, und unterhalb dessen jeweils ein Menu für jedes MenuItem
if (menuItems != null) {
if (workerPane.getTitle().startsWith(DataInterface.MAIN_PANE_NAME)) {
int i = 0;
for (DataInterfaceMenuAction simMenuItem : menuItems) {
JMenuItem mnItem = new JMenuItem();
mnItem.setAction(new WorkerAction(simMenuItem, worker, workerPane));
mnuFile.insert(mnItem, i++);
mnItem.setEnabled(simMenuItem.isEnabled());
}
} else {
JMenu mniWorker = new JMenu(workerPane.getTitle());
for (DataInterfaceMenuAction simMenuItem : menuItems) {
JMenuItem mnItem = new JMenuItem();
mnItem.setAction(new WorkerAction(simMenuItem, worker, workerPane));
mniWorker.add(mnItem);
mnItem.setEnabled(simMenuItem.isEnabled());
}
mnuFile.insert(mniWorker, 2);
}
}
availableViews.put(workerPane.getTitle(), workerPane);
}
@Override
public IWorkerPane getOrCreateWorkerPane(String instance) {
if (availableViews != null) {
IWorkerPane view = availableViews.get(instance);
if (view != null) {
return view;
}
}
return GuiFactory.getWorkerPane(instance);
}
@Override
public void setMainPaneName(String mainPaneName) {
this.mainPaneName = mainPaneName;
}
@Override
public String getMainPaneName() {
return mainPaneName;
}
@Override
public void setWorker(IWorker worker) {
this.worker = worker;
}
@Override
public void setSimulation(IWorker simulation) {
this.simulation = simulation;
}
@Override
public void setActionProperties(DataInterfaceMenuAction action, String instance) {
// dieses Event an die entsprechende View weiter leiten
IWorkerPane view = availableViews.get(instance);
try {
view.notifyActionPropertiesChanged(action);
} catch (Exception e) {
}
// alle MenuItems durchforsten
// das menu-item suchen das so heisst wie die instance, darunter liegende actions mit exakt diesem Namen finden
// File Menu durchsuchen
for (int i = 0; i < getMnuFile().getItemCount(); i++) {
JMenuItem menuItem = getMnuFile().getItem(i);
if (menuItem.getText().equals(instance)) {
// Übergeordnetes Menu gefunden
if (menuItem instanceof JMenu) {
JMenu parent = (JMenu) menuItem;
for (int j = 0; j < parent.getItemCount(); j++) {
if (parent.getItem(j).getText().equals(action.getMenuText())) {
LogHandler.log(LOGGER, LogLevel.INFO,
"updating menu item enabled flag for " + action.getMenuText() + " to " + action.isEnabled());
parent.getItem(j).setEnabled(action.isEnabled());
}
}
}
}
}
// auch noch in den Simulationen suchen...
for (int i = 0; i < getMnuSimulations().getItemCount(); i++) {
JMenuItem menuItem = getMnuSimulations().getItem(i);
if (menuItem.getText().equals(instance)) {
// Übergeordnetes Menu gefunden
if (menuItem instanceof JMenu) {
JMenu parent = (JMenu) menuItem;
for (int j = 0; j < parent.getItemCount(); j++) {
if (parent.getItem(j).getText().equals(action.getMenuText())) {
LogHandler.log(LOGGER, LogLevel.INFO,
"updating menu item enabled flag for " + action.getMenuText() + " to " + action.isEnabled());
parent.getItem(j).setEnabled(action.isEnabled());
}
}
}
}
}
}
@Override
public void fireMenuItem(DataInterfaceMenuAction menuItem) {
// Der Hauptdialog reagiert nicht wie eine Simulation
}
@Override
public void setInstanceCount(int size) {
// startAll nur dann sichtbar, wenn es mehr als einen Worker gibt!!
}
@Override
public void clear() {
}
@Override
public void setRemoteGui(IRemoteGui remoteGui) {
}
@Override
public List<InstanceMessage> getInstanceMessages(String instanceName) {
return null;
}
public void setGuiConsole(DataInterfaceAdminConsole dataInterfaceGui) {
// this.dataInterfaceGui = dataInterfaceGui;
}
public void closeViewRequest() {
setVisible(false);
}
public void exitApplication() {
// beenden nach Sicherheitsabfrage
if (JOptionPane.showConfirmDialog(this, ResourcePool.getInstance().getString(REALLY_SHUTDOWN),
ResourcePool.getInstance().getString(SHUTDOWN_TITLE), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
try {
remoteDataInterface.exitApplication();
} catch (Throwable th) {
}
setVisible(false);
}
}
public void setRemoteInterface(IRemoteInterface remoteDataInterface) {
if (remoteDataInterface.getStartType() == InterfaceStartType.SERVICE) {
exitGuiConsole.setEnabled(false);
}
this.remoteDataInterface = remoteDataInterface;
}
public IRemoteInterface getRemoteDataInterface() {
return remoteDataInterface;
}
public void setRemoteInterfaceInfo(RemoteInterfaceInfo remoteIntfInfo) {
this.remoteInterfaceInfo = remoteIntfInfo;
}
public RemoteInterfaceInfo getRemoteInterfaceInfo() {
return remoteInterfaceInfo;
}
/**
* @return the position of the Dialog window, but not as a java-awt.Rectangle, because this class is not allowed in a WAR
* application
*/
public Rectangle getRectangle() {
Rectangle r = new Rectangle(getX(), getY(), getWidth(), getHeight());
return r;
}
}

View File

@@ -0,0 +1,297 @@
/*
* Copyright (c) 2013 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface.gui;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXLabel;
import com.itac.resource.ResourcePool;
import com.itac.resource.Resources;
import com.itac.resource.ResourcesIMSInterfacesImages;
import com.jgoodies.layout.layout.ColumnSpec;
import com.jgoodies.layout.layout.FormLayout;
import com.jgoodies.layout.layout.FormSpecs;
import com.jgoodies.layout.layout.RowSpec;
/**
*
* @author frankp
*/
public class DataInterfaceLoginDlg extends JXFrame {
private JLabel itacLogo;
private JButton jButtonCancel;
private JButton jButtonLogin;
private JLabel jXLabelTitle;
private JPanel jPanel1;
private JPasswordField jPasswordField;
private JTextField jTextFieldUser;
private JTextField jTextFieldClient;
private JXLabel jXLabelInfo;
private JXLabel jXLabelPassword;
private JXLabel jXLabelClient;
private JXLabel jXLabelUser;
/**
* Creates new form AuthenticationLoginDialog
*
* @param aController
*/
public DataInterfaceLoginDlg() {
setStartPosition(StartPosition.CenterInScreen);
initComponents();
BufferedImage imgOld2 = ResourcePool.getInstance().getImage(ResourcesIMSInterfacesImages.ITAC_LOGO_WHITE);
int widthOld2 = imgOld2.getWidth();
int heightOld2 = imgOld2.getHeight();
Image imgNew2 = imgOld2.getScaledInstance((widthOld2 * 100) / heightOld2, 100, Image.SCALE_SMOOTH);
Icon icon2 = new ImageIcon(imgNew2);
getContentPane().setLayout(
new FormLayout(new ColumnSpec[] { ColumnSpec.decode("680px"), }, new RowSpec[] { RowSpec.decode("fill:350px"), }));
itacLogo.setIcon(icon2);
getContentPane().add(jPanel1, "1, 1, fill, top");
jPanel1.setLayout(new FormLayout(new ColumnSpec[] { ColumnSpec.decode("62px"), ColumnSpec.decode("341px"),
ColumnSpec.decode("57px"), ColumnSpec.decode("94px"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("90px"), },
new RowSpec[] { RowSpec.decode("38px"), RowSpec.decode("79px"), FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("20px"),
FormSpecs.UNRELATED_GAP_ROWSPEC, RowSpec.decode("17px"), FormSpecs.RELATED_GAP_ROWSPEC,
FormSpecs.DEFAULT_ROWSPEC, FormSpecs.UNRELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC,
FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.UNRELATED_GAP_ROWSPEC,
RowSpec.decode("max(30dlu;default)"), FormSpecs.UNRELATED_GAP_ROWSPEC, RowSpec.decode("23px"),
RowSpec.decode("40dlu:grow"), }));
jPanel1.add(itacLogo, "2, 2, 1, 3, fill, bottom");
jPanel1.add(jXLabelTitle, "2, 6, 1, 3, left, bottom");
jPanel1.add(jXLabelUser, "4, 2, 3, 1, left, bottom");
jPanel1.add(jXLabelPassword, "4, 6, 3, 1, left, bottom");
jPanel1.add(jXLabelClient, "4, 10, 3, 1, left, bottom");
jPanel1.add(jXLabelInfo, "4, 14, 3, 1, fill, top");
jPanel1.add(jTextFieldClient, "4, 12, 3, 1, fill, bottom");
jPanel1.add(jButtonLogin, "4, 16, fill, top");
jPanel1.add(jButtonCancel, "6, 16, left, top");
jPanel1.add(jTextFieldUser, "4, 4, 3, 1, fill, bottom");
jPanel1.add(jPasswordField, "4, 8, 3, 1, fill, bottom");
// initHeader();
jTextFieldUser.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
checkInput(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
checkInput(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
checkInput(e);
}
private void checkInput(DocumentEvent e) {
int length = e.getDocument().getLength();
if (jPasswordField.getPassword() != null && jPasswordField.getPassword().length > 0) {
if (length > 0) {
jButtonLogin.setEnabled(true);
} else {
jButtonLogin.setEnabled(false);
}
}
}
});
jPasswordField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
checkInput(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
checkInput(e);
}
@Override
public void changedUpdate(DocumentEvent e) {
checkInput(e);
}
private void checkInput(DocumentEvent e) {
int length = e.getDocument().getLength();
if (jTextFieldUser.getText().length() > 0) {
if (length > 0) {
jButtonLogin.setEnabled(true);
} else {
jButtonLogin.setEnabled(false);
}
}
}
});
setIconImage(ResourcePool.getInstance().getImage(Resources.Images.ICON_MES));
setLocationRelativeTo(null);
}
/**
* This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
* content of this method is always regenerated by the Form Editor.
*/
private void initComponents() {
jPanel1 = new BackgroundPanel();
jXLabelUser = new JXLabel();
jTextFieldUser = new JTextField();
jXLabelPassword = new JXLabel();
jPasswordField = new JPasswordField();
jXLabelInfo = new JXLabel();
jXLabelInfo.setFont(new Font("Tahoma", Font.BOLD, 11));
jXLabelClient = new JXLabel();
jTextFieldClient = new JTextField();
itacLogo = ComponentFactory.createLabel();
jXLabelTitle = new JLabel();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle(ResourcePool.getInstance().getString(Resources.Logon.TITLEDBORDER_BORDERTEXT));
setResizable(false);
setUndecorated(true);
jPanel1.setName("jPanel1");
jXLabelUser.setForeground(new Color(255, 255, 255));
jXLabelUser.setText(ResourcePool.getInstance().getString(Resources.Logon.JLABEL_USERNAME));
jXLabelUser.setFont(new Font("Tahoma", 1, 14));
jXLabelUser.setName("jXLabelUser");
jTextFieldUser.setName("jTextFieldUser");
jTextFieldUser.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
jTextFieldUserKeyPressed(evt);
}
});
jXLabelPassword.setForeground(new Color(255, 255, 255));
jXLabelPassword.setText(ResourcePool.getInstance().getString(Resources.Logon.JLABEL_PASSWORD));
jXLabelPassword.setFont(new Font("Tahoma", 1, 14));
jXLabelPassword.setName("jXLabelPassword");
jPasswordField.setName("jPasswordField");
jPasswordField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
jPasswordFieldKeyPressed(evt);
}
});
jXLabelClient.setForeground(new Color(255, 255, 255));
jXLabelClient.setText(ResourcePool.getInstance().getString(Resources.AdmRes.ADMARTIKELSTAMMPANEL$TXT_CLIENT));
jXLabelClient.setFont(new Font("Tahoma", 1, 14));
jXLabelClient.setName("jXLabelClient");
jTextFieldClient.setName("jtfClient");
jTextFieldClient.setText("01");
jButtonLogin = ComponentFactory.createButton("loginBtn", Resources.Logon.JBUTTON_OK);
jButtonLogin.setDefaultCapable(true);
jButtonLogin.setEnabled(false);
jButtonLogin.setOpaque(false);
// jButtonLogin.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent evt) {
// jButtonLoginActionPerformed(evt);
// }
// });
jXLabelInfo.setForeground(new Color(234, 153, 130));
jXLabelInfo.setText("");
jXLabelInfo.setLineWrap(true);
jXLabelInfo.setName("jXLabelInfo");
jButtonCancel = ComponentFactory.createButton("cancelBtn", Resources.Logon.JBUTTON_CANCEL);
jButtonCancel.setOpaque(false);
// jButtonCancel.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent evt) {
// jButtonCancelActionPerformed(evt);
// }
// });
itacLogo.setName("itacLogo");
jXLabelTitle.setFont(ComponentFactory.fontLoginTitle);
jXLabelTitle.setForeground(new Color(234, 153, 130));
jXLabelTitle.setHorizontalAlignment(SwingConstants.CENTER);
jXLabelTitle.setText("imsInterfaces.adminConsole");
jXLabelTitle.setName("imsInterfaces.adminConsole");
pack();
}
// private void jButtonCancelActionPerformed(ActionEvent evt) {
// System.exit(0);
// }
//
// private void jButtonLoginActionPerformed(ActionEvent evt) {
// adminConsole.login();
// }
private void jPasswordFieldKeyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
jButtonLogin.doClick();
}
}
private void jTextFieldUserKeyPressed(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
jButtonLogin.doClick();
}
}
public JPasswordField getPasswordField() {
return jPasswordField;
}
public JTextField getUserField() {
return jTextFieldUser;
}
public JXLabel getLoginStatusLabel() {
return jXLabelInfo;
}
public JTextField getClientField() {
return jTextFieldClient;
}
public JButton getOkBtn() {
return jButtonLogin;
}
public JButton getCancelBtn() {
return jButtonCancel;
}
}

View File

@@ -0,0 +1,79 @@
package com.itac.mes.datainterface.gui;
import static com.itac.mes.datainterface.gui.ComponentFactory.createButton;
import static com.itac.mes.datainterface.gui.ComponentFactory.createCheckBox;
import static com.itac.mes.datainterface.gui.ComponentFactory.createLabel;
import static com.itac.mes.datainterface.gui.ComponentFactory.fontLabelBold;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import com.itac.mes.datainterface.data.Settings;
import com.itac.resource.ResourcePool;
import com.itac.resource.Resources;
import com.itac.resource.ResourcesIMSInterfaces;
import com.jgoodies.layout.layout.ColumnSpec;
import com.jgoodies.layout.layout.FormLayout;
import com.jgoodies.layout.layout.FormSpecs;
import com.jgoodies.layout.layout.RowSpec;
public class SettingsDlg extends JDialog {
private JCheckBox chckbxValidConfigurationsOnly;
private Settings settings;
public SettingsDlg() {
setPreferredSize(new Dimension(400, 135));
setMinimumSize(new Dimension(400, 135));
setTitle(ResourcePool.getInstance().getString(Resources.IMSInterfaces.SETTINGS));
getContentPane().setLayout(
new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"),
FormSpecs.RELATED_GAP_COLSPEC, FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC,
FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, }, new RowSpec[] { FormSpecs.RELATED_GAP_ROWSPEC,
FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, RowSpec.decode("default:grow"),
FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, }));
JLabel lblSettings = createLabel("Settings", ResourcesIMSInterfaces.SETTINGS, fontLabelBold);
getContentPane().add(lblSettings, "2, 2");
chckbxValidConfigurationsOnly = createCheckBox("valid configurations only", Resources.IMSInterfaces.VALID_CONFIGURATIONS_ONLY);
getContentPane().add(chckbxValidConfigurationsOnly, "2, 4, 5, 1, fill, top");
JButton btnOk = createButton("OK", Resources.Basic.TXT_OK);
btnOk.setDefaultCapable(true);
btnOk.setOpaque(false);
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setVisible(false);
settings.changed = true;
settings.validConfigurationsOnly = chckbxValidConfigurationsOnly.isSelected();
}
});
getContentPane().add(btnOk, "4, 6");
JButton jButtonCancel = ComponentFactory.createButton("cancelBtn", Resources.Basic.TXT_CANCEL);
// jButtonCancel.setText(ResourcePool.getInstance().getString(Resources.Logon.JBUTTON_CANCEL));
// jButtonCancel.setName("jButtonCancel");
jButtonCancel.setOpaque(false);
jButtonCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setVisible(false);
}
});
getContentPane().add(jButtonCancel, "6, 6");
}
public void setSettings(Settings settings) {
this.settings = settings;
settings.changed = false;
chckbxValidConfigurationsOnly.setSelected(settings.validConfigurationsOnly);
}
}

View File

@@ -0,0 +1,64 @@
/*
* Copyright (c) 2013 iTAC Software AG, Germany. All Rights Reserved.
*
* This software is protected by copyright. Under no circumstances may any part of this file in any form be copied,
* printed, edited or otherwise distributed, be stored in a retrieval system, or be translated into another language
* without the written permission of iTAC Software AG.
*/
package com.itac.mes.datainterface.service;
import com.itac.mes.datainterface.config.AdminConsoleConfig;
import com.itac.mes.imsapi.domain.container.IMSApiSessionValidationStruct;
import com.itac.mes.imsapi.domain.container.Result_regLogin;
import com.itac.util.logging.LogHandler;
import com.itac.util.logging.LogLevel;
public class LoginService {
private AdminConsoleConfig adminConsoleConfig;
public LoginService(AdminConsoleConfig adminConsoleConfig) {
this.adminConsoleConfig = adminConsoleConfig;
}
/**
* @param user
* der Name des Users
* @param password
* Password des Users
* @param client
* Client/Mandant, default sollte "01" sein
* @return Leerstring, wenn die Anmeldung erfolgreich war, sonst einen Fehlertext
*/
public String login(String user, String password, String client) {
LogHandler.log("Login", LogLevel.INFO, "login()");
IMSApiSessionValidationStruct svs = new IMSApiSessionValidationStruct();
svs.registrationType = "U"; // User
svs.user = user;
svs.password = password;
svs.client = client;
svs.systemIdentifier = "imsInterfacesAdminConsole";
try {
Result_regLogin result = adminConsoleConfig.getImsApiService().regLogin(svs);
if (result != null) {
if (result.return_value == 0) {
// sessionContext = result.sessionContext;
// if (sessionContext == null) {
// sessionContext = new IMSApiSessionContextStruct();
// }
return null;
} else {
String errorText = adminConsoleConfig.getResultText(result.return_value);
LogHandler.log("Login", LogLevel.INFO, errorText);
return errorText;
}
} else {
LogHandler.log("Login", LogLevel.INFO, "login() failed! Return value is null!");
return "login() failed! Return value is null!";
}
} catch (Throwable th) {
return th.getLocalizedMessage();
}
}
}