initialize
This commit is contained in:
27
interface/yamaha/plugin/.classpath
Normal file
27
interface/yamaha/plugin/.classpath
Normal file
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
||||
36
interface/yamaha/plugin/.project
Normal file
36
interface/yamaha/plugin/.project
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>data-interface-yamaha-plugin</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,4 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=UTF-8
|
||||
encoding//src/test/java=UTF-8
|
||||
encoding/<project>=UTF-8
|
||||
@@ -0,0 +1,8 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
@@ -0,0 +1,4 @@
|
||||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||
<wb-module deploy-name="data-interface-yamaha-plugin">
|
||||
<wb-resource deploy-path="/" source-path="/src/main/java"/>
|
||||
</wb-module>
|
||||
</project-modules>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<faceted-project>
|
||||
<installed facet="java" version="1.8"/>
|
||||
<installed facet="jst.utility" version="1.0"/>
|
||||
</faceted-project>
|
||||
@@ -0,0 +1,2 @@
|
||||
disabled=06target
|
||||
eclipse.preferences.version=1
|
||||
65
interface/yamaha/plugin/pom.xml
Normal file
65
interface/yamaha/plugin/pom.xml
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.itac.interface.interfaces</groupId>
|
||||
<artifactId>data-interface-yamaha-plugin</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>data-interface-yamaha-plugin</name>
|
||||
<version>${mes.interface.version}</version>
|
||||
<parent>
|
||||
<groupId>com.itac.interface.interfaces</groupId>
|
||||
<artifactId>data-interface-yamaha</artifactId>
|
||||
<version>${mes.interface.version}</version>
|
||||
</parent>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.itac.product</groupId>
|
||||
<artifactId>artes-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.itac.interface.yamaha</groupId>
|
||||
<artifactId>yamaha-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.itac.interface.interfaces</groupId>
|
||||
<artifactId>data-interface-core-definition</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>create-project-bundle</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>zippackaging</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
<classifier>zip</classifier>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/descriptor.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
BIN
interface/yamaha/plugin/site/jacoco.exec
Normal file
BIN
interface/yamaha/plugin/site/jacoco.exec
Normal file
Binary file not shown.
21
interface/yamaha/plugin/src/main/assembly/descriptor.xml
Normal file
21
interface/yamaha/plugin/src/main/assembly/descriptor.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||
<id>bin</id>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>false</includeBaseDirectory>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>${project.build.directory}</directory>
|
||||
<outputDirectory/>
|
||||
<includes>
|
||||
<include>*dependencies*.jar</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>*.zip</exclude>
|
||||
</excludes>
|
||||
</fileSet>
|
||||
</fileSets>
|
||||
</assembly>
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.itac.mes.yamaha;
|
||||
|
||||
public interface IMesServicesChannel extends IMesServices {
|
||||
|
||||
public boolean isShutdown();
|
||||
|
||||
public void startup();
|
||||
|
||||
public void shutdown();
|
||||
|
||||
public String getChannelName();
|
||||
|
||||
public void setChannelName(String channelName);
|
||||
}
|
||||
@@ -0,0 +1,534 @@
|
||||
/*
|
||||
* Copyright (c) 2010 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.yamaha;
|
||||
|
||||
import static com.itac.mes.yamaha.ResponseDetail.OK;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Date;
|
||||
|
||||
import javax.jws.WebService;
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBElement;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import javax.xml.namespace.QName;
|
||||
|
||||
import com.itac.mes.datainterface.data.IMesServicesLog;
|
||||
import com.itac.mes.datainterface.socket.BaseIhapHandler;
|
||||
import com.itac.mes.yamaha.data.CheckContainerRequest;
|
||||
import com.itac.mes.yamaha.data.CheckContainerResponse;
|
||||
import com.itac.mes.yamaha.data.CreateContainerRequest;
|
||||
import com.itac.mes.yamaha.data.CreateContainerResponse;
|
||||
import com.itac.mes.yamaha.data.ErrorDetail;
|
||||
import com.itac.mes.yamaha.data.InterlockingRequest;
|
||||
import com.itac.mes.yamaha.data.InterlockingResponse;
|
||||
import com.itac.mes.yamaha.data.ItemProducedRequest;
|
||||
import com.itac.mes.yamaha.data.MachineMessageRequest;
|
||||
import com.itac.mes.yamaha.data.MachineStatusRequest;
|
||||
import com.itac.mes.yamaha.data.MaterialConsumedRequest;
|
||||
import com.itac.mes.yamaha.data.MesConfigurationResponse;
|
||||
import com.itac.mes.yamaha.data.MesRequest;
|
||||
import com.itac.mes.yamaha.data.MesResponse;
|
||||
import com.itac.mes.yamaha.data.MesStartRequest;
|
||||
import com.itac.mes.yamaha.data.PlacementRecipeCheckRequest;
|
||||
import com.itac.mes.yamaha.data.PlacementRecipeCheckResponse;
|
||||
import com.itac.mes.yamaha.sockets.IhapHandler;
|
||||
|
||||
/**
|
||||
* @author frankp created 2011
|
||||
*/
|
||||
@WebService(endpointInterface = "com.itac.mes.yamaha.IMesServices")
|
||||
public class MesServices implements IMesServices, IMesServicesLog {
|
||||
|
||||
private static String LOG_PREFIX = "iTAC.MES.Suite SMT-Plugin > ";
|
||||
|
||||
private static final int MIN_REQUEST_ID = 0;
|
||||
private static final int MAX_REQUEST_ID = 1000000;
|
||||
|
||||
private static final int MIN_PORT = 1023;
|
||||
private static final int MAX_PORT = 49150;
|
||||
|
||||
private boolean isConfigured;
|
||||
private boolean isActive;
|
||||
private boolean isConnected;
|
||||
private String sHost;
|
||||
private int iPort;
|
||||
private int requestId;
|
||||
private boolean logDetails = false; // default keine details loggen
|
||||
|
||||
private PropertyChangeListener interfaceConnectionListener;
|
||||
private IMesServices interfaceConnection;
|
||||
private Marshaller marshaller;
|
||||
|
||||
public MesServices() {
|
||||
isConfigured = false;
|
||||
isConnected = false;
|
||||
requestId = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vorbedingungen sind dass der Request gesetzt ist, sowie die Konfiguration und die aktivierung des Plugin
|
||||
*
|
||||
* @param mesResponse
|
||||
* @param mesRequest
|
||||
* @throws YamahaException
|
||||
*/
|
||||
private void checkPreconditions(MesResponse mesResponse, MesRequest mesRequest) throws YamahaException {
|
||||
if (mesRequest == null) {
|
||||
throw new YamahaException(ResponseDetail.REQUEST_IS_NULL);
|
||||
}
|
||||
if (mesRequest.getRequestId() <= 0) {
|
||||
mesRequest.setRequestId(getRequestId());
|
||||
}
|
||||
if (mesRequest.getEventDate() == null) {
|
||||
mesRequest.setEventDate(new Date());
|
||||
}
|
||||
// Request ausgeben
|
||||
logRequest(mesRequest);
|
||||
// requestId aus Request in den Response uebernehmen
|
||||
mesResponse.setRequestId(mesRequest.getRequestId());
|
||||
// Konfigurationsprobleme checken
|
||||
if (!isConfigured) {
|
||||
throw new YamahaException(ResponseDetail.PLUGIN_NOT_CONFIGURED);
|
||||
}
|
||||
if (!isActive) {
|
||||
throw new YamahaException(ResponseDetail.PLUGIN_NOT_ACTIVE);
|
||||
}
|
||||
if (!isConnected) {
|
||||
throw new YamahaException(ResponseDetail.PLUGIN_NOT_CONNECTED);
|
||||
}
|
||||
setResponseValues(mesResponse, OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* finalizing means closing communication channel and loggin response Object
|
||||
*
|
||||
* @param connection
|
||||
* the used connection
|
||||
* @param responseObject
|
||||
* the responseObject
|
||||
*/
|
||||
private void finalizeRequest(IMesServicesChannel connection, MesResponse responseObject) {
|
||||
if (connection != null) {
|
||||
connection.shutdown();
|
||||
}
|
||||
logResponse(responseObject);
|
||||
}
|
||||
|
||||
/**
|
||||
* gets a new communication cahnnel with specified name
|
||||
*
|
||||
* @param channelName
|
||||
* the name for the channel
|
||||
* @param connectionListener
|
||||
* @return
|
||||
* @throws IOException
|
||||
*/
|
||||
protected IMesServicesChannel getConnection(String channelName, PropertyChangeListener connectionListener) throws IOException {
|
||||
IMesServicesChannel serviceChannel = IhapHandler.connect(sHost, iPort, channelName, connectionListener,
|
||||
getClass().getClassLoader(), this);
|
||||
// Kanal Ueberwachung starten
|
||||
serviceChannel.startup();
|
||||
isConnected = true;
|
||||
return serviceChannel;
|
||||
}
|
||||
|
||||
// convenient method
|
||||
private ErrorDetail getErrorDetail(String detail, int code) {
|
||||
ErrorDetail errorDetail = new ErrorDetail();
|
||||
errorDetail.setCode(code);
|
||||
errorDetail.setDetail(detail);
|
||||
return errorDetail;
|
||||
}
|
||||
|
||||
// creates an almost unique id
|
||||
private int getRequestId() {
|
||||
requestId += 1;
|
||||
if (requestId >= MAX_REQUEST_ID) {
|
||||
requestId = MIN_REQUEST_ID;
|
||||
}
|
||||
return requestId;
|
||||
}
|
||||
|
||||
private void handleThrowable(MesResponse response, Throwable throwable) {
|
||||
response.setTotalResult(IMesServices.MES_RESULT_NOT_OK);
|
||||
if (throwable instanceof YamahaException) {
|
||||
setResponseValues(response, ((YamahaException) throwable).getResponseDetail());
|
||||
} else if (throwable instanceof IOException) {
|
||||
response.getErrorDetails().add(getErrorDetail(throwable.getMessage(), ResponseDetail.COMMUNICATION_FAILURE.getCode()));
|
||||
} else {
|
||||
response.getErrorDetails().add(getErrorDetail(throwable.getMessage(), ResponseDetail.PROCESSED_WITH_EXCEPTION.getCode()));
|
||||
throwable.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
private void logResponse(MesResponse mesResponse) {
|
||||
if (mesResponse == null) {
|
||||
System.out.println(LOG_PREFIX + "finish empty request");
|
||||
return;
|
||||
}
|
||||
System.out.println(LOG_PREFIX + "finish request " + mesResponse.getRequestId() + " with code " + mesResponse.getTotalResult());
|
||||
|
||||
if (logDetails) {
|
||||
try {
|
||||
System.out.print(LOG_PREFIX);
|
||||
JAXBElement<?> jexbelement = new JAXBElement(new QName(mesResponse.getClass().getSimpleName()), mesResponse.getClass(),
|
||||
mesResponse);
|
||||
marshaller.marshal(jexbelement, System.out);
|
||||
} catch (Throwable e) {
|
||||
System.out.print("-> Error logging mesResponse details");
|
||||
} finally {
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
private void logRequest(MesRequest mesRequest) {
|
||||
System.out
|
||||
.print(LOG_PREFIX + "start request " + mesRequest.getRequestId() + " (" + mesRequest.getClass().getSimpleName() + ")");
|
||||
if (logDetails) {
|
||||
try {
|
||||
JAXBElement<?> jexbelement = new JAXBElement(new QName(mesRequest.getClass().getSimpleName()), mesRequest.getClass(),
|
||||
mesRequest);
|
||||
marshaller.marshal(jexbelement, System.out);
|
||||
} catch (Throwable e) {
|
||||
System.out.print("-> Error logging mesRequest details");
|
||||
}
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
private void setResponseValues(MesResponse response, ResponseDetail responseDetail) {
|
||||
if (responseDetail == ResponseDetail.OK) {
|
||||
response.setTotalResult(IMesServices.MES_RESULT_OK);
|
||||
return;
|
||||
}
|
||||
response.setTotalResult(IMesServices.MES_RESULT_NOT_OK);
|
||||
response.getErrorDetails().add(getErrorDetail(responseDetail.getText(), responseDetail.getCode()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CreateContainerResponse mesCreateContainer(CreateContainerRequest createContainerRequest) {
|
||||
CreateContainerResponse responseObject = new CreateContainerResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, createContainerRequest);
|
||||
connection = getConnection("createContainer", null);
|
||||
responseObject = connection.mesCreateContainer(createContainerRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CheckContainerResponse mesCheckContainer(CheckContainerRequest checkContainerRequest) {
|
||||
CheckContainerResponse responseObject = new CheckContainerResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, checkContainerRequest);
|
||||
connection = getConnection("createContainer", null);
|
||||
responseObject = connection.mesCheckContainer(checkContainerRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlacementRecipeCheckResponse mesCheckPlacementRecipe(PlacementRecipeCheckRequest placementRecipeCheckRequest) {
|
||||
PlacementRecipeCheckResponse responseObject = new PlacementRecipeCheckResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, placementRecipeCheckRequest);
|
||||
connection = getConnection("checkPlacementRecipe", null);
|
||||
responseObject = connection.mesCheckPlacementRecipe(placementRecipeCheckRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InterlockingResponse mesInterlocking(InterlockingRequest interlockingRequest) {
|
||||
InterlockingResponse responseObject = new InterlockingResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, interlockingRequest);
|
||||
connection = getConnection("interlocking", null);
|
||||
responseObject = connection.mesInterlocking(interlockingRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesItemProduced(ItemProducedRequest itemProducedRequest) {
|
||||
MesResponse responseObject = new MesResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, itemProducedRequest);
|
||||
connection = getConnection("itemProduced", null);
|
||||
responseObject = connection.mesItemProduced(itemProducedRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesMachineState(MachineStatusRequest machineStatus) {
|
||||
MesResponse responseObject = new MesResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, machineStatus);
|
||||
connection = getConnection("machineStatus", null);
|
||||
responseObject = connection.mesMachineState(machineStatus);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesMachineMessage(MachineMessageRequest machineMessage) {
|
||||
MesResponse responseObject = new MesResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, machineMessage);
|
||||
connection = getConnection("machineMessage", null);
|
||||
responseObject = connection.mesMachineMessage(machineMessage);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesMaterialConsumed(MaterialConsumedRequest materialConsumedRequest) {
|
||||
MesResponse responseObject = new MesResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, materialConsumedRequest);
|
||||
connection = getConnection("materialConsumed", null);
|
||||
responseObject = connection.mesMaterialConsumed(materialConsumedRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesConfigurationResponse mesGetConfiguration(MesRequest mesRequest) {
|
||||
MesConfigurationResponse responseObject = new MesConfigurationResponse();
|
||||
IMesServicesChannel connection = null;
|
||||
try {
|
||||
checkPreconditions(responseObject, mesRequest);
|
||||
connection = getConnection("getConfiguration", null);
|
||||
responseObject = connection.mesGetConfiguration(mesRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
finalizeRequest(connection, responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesStart(MesRequest mesRequest) {
|
||||
MesStartRequest mesStart = new MesStartRequest();
|
||||
mesStart.setRequestId(mesRequest.getRequestId());
|
||||
mesStart.setEventDate(mesRequest.getEventDate());
|
||||
return mesStart(mesStart);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesStart(MesStartRequest mesRequest) {
|
||||
MesResponse responseObject = new MesResponse();
|
||||
try {
|
||||
try {
|
||||
checkPreconditions(responseObject, mesRequest);
|
||||
} catch (YamahaException ye) {
|
||||
}
|
||||
// zuerst die properties pruefen und Werte uebernehmen
|
||||
if (System.getProperties().containsKey(MES_LOG_PREFIX)) {
|
||||
LOG_PREFIX = System.getProperty(MES_LOG_PREFIX);
|
||||
}
|
||||
if (System.getProperties().containsKey(MES_LOG_DETAILS)) {
|
||||
String sLogDetails = System.getProperty(MES_LOG_DETAILS);
|
||||
logDetails = sLogDetails.equalsIgnoreCase(Boolean.TRUE.toString()) || sLogDetails.equals("1");
|
||||
}
|
||||
|
||||
if (logDetails && marshaller == null) {
|
||||
// alle Klassen aus diesem Package...
|
||||
Class<?>[] classes = new Class[] { CreateContainerRequest.class, CreateContainerResponse.class, CheckContainerRequest.class,
|
||||
CheckContainerResponse.class, InterlockingRequest.class, InterlockingResponse.class, ItemProducedRequest.class,
|
||||
MachineMessageRequest.class, MachineStatusRequest.class, MaterialConsumedRequest.class, MesConfigurationResponse.class,
|
||||
MesRequest.class, MesResponse.class, PlacementRecipeCheckRequest.class, PlacementRecipeCheckResponse.class };
|
||||
|
||||
JAXBContext jc;
|
||||
try {
|
||||
jc = JAXBContext.newInstance(classes);
|
||||
marshaller = jc.createMarshaller();
|
||||
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
|
||||
} catch (JAXBException e) {
|
||||
System.err.println(LOG_PREFIX + "no jaxb context or marshaller created");
|
||||
responseObject.getErrorDetails().add(getErrorDetail("no jaxb context or marshaller created", -1));
|
||||
}
|
||||
} else {
|
||||
// wenn das detailled loggin ausgeschlaten wurde auch den marshaller killen; bei erneutem mesStart call wird ein
|
||||
// neuer marshaller erzeugt
|
||||
marshaller = null;
|
||||
}
|
||||
|
||||
// ab jetzt fachlich checken
|
||||
if (mesRequest == null) {
|
||||
throw new YamahaException(ResponseDetail.REQUEST_IS_NULL);
|
||||
}
|
||||
logRequest(mesRequest);
|
||||
|
||||
if (isActive) {
|
||||
setResponseValues(responseObject, ResponseDetail.OK);
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
if (!isConfigured) {
|
||||
boolean ok = true;
|
||||
try {
|
||||
sHost = System.getProperty(MesServices.MES_HOST).toString();
|
||||
} catch (Exception exception) {
|
||||
String err = MessageFormat.format("{0}setting value for property {1} failed", LOG_PREFIX, MES_HOST);
|
||||
System.err.println(err);
|
||||
responseObject.getErrorDetails().add(getErrorDetail(err, -1));
|
||||
ok = false;
|
||||
}
|
||||
try {
|
||||
String sPort = System.getProperty(MesServices.MES_PORT).toString();
|
||||
iPort = Integer.parseInt(sPort);
|
||||
if ((iPort < MIN_PORT) || (iPort > MAX_PORT)) {
|
||||
String err = MessageFormat.format("{0}setting value for property {1} failed, value {2} is out of range {3}..{4}",
|
||||
LOG_PREFIX, MES_PORT, sPort, MIN_PORT, MAX_PORT);
|
||||
System.err.println(err);
|
||||
responseObject.getErrorDetails().add(getErrorDetail(err, -1));
|
||||
ok = false;
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
String err = MessageFormat.format("{0}setting value for property {1} failed:{2}", LOG_PREFIX, MES_PORT,
|
||||
exception.getClass().getSimpleName());
|
||||
System.err.println(err);
|
||||
responseObject.getErrorDetails().add(getErrorDetail(err, -1));
|
||||
ok = false;
|
||||
}
|
||||
if (!ok) {
|
||||
throw new YamahaException(ResponseDetail.WRONG_COMMUNICATION_PROPERTIES);
|
||||
}
|
||||
isConfigured = true;
|
||||
}
|
||||
if (!isActive) {
|
||||
interfaceConnectionListener = new PropertyChangeListener() {
|
||||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
BaseIhapHandler ihapHandler = (BaseIhapHandler) evt.getSource();
|
||||
System.out.println(LOG_PREFIX + ihapHandler.getChannelName() + " was closed by iTAC.MES.Suite DataInterface");
|
||||
}
|
||||
};
|
||||
try {
|
||||
if (interfaceConnection != null) {
|
||||
if (((IMesServicesChannel) interfaceConnection).isShutdown()) {
|
||||
interfaceConnection = null;
|
||||
isConnected = false;
|
||||
}
|
||||
}
|
||||
|
||||
interfaceConnection = getConnection("interfaceConnection", interfaceConnectionListener);
|
||||
long start = System.nanoTime();
|
||||
responseObject = interfaceConnection.mesStart(mesRequest);
|
||||
|
||||
long finished = System.nanoTime();
|
||||
System.out.println(LOG_PREFIX + "roundtrip = " + ((finished - start) / 1000L) + " microseconds");
|
||||
isActive = true;
|
||||
} catch (IOException e) {
|
||||
throw new YamahaException(ResponseDetail.COMMUNICATION_FAILURE);
|
||||
}
|
||||
}
|
||||
} catch (YamahaException cse) {
|
||||
handleThrowable(responseObject, cse);
|
||||
} finally {
|
||||
logResponse(responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesGetStatus(MesRequest mesRequest) {
|
||||
MesResponse responseObject = new MesResponse();
|
||||
try {
|
||||
checkPreconditions(responseObject, mesRequest);
|
||||
responseObject = interfaceConnection.mesGetStatus(mesRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
logResponse(responseObject);
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesResponse mesStop(MesRequest mesRequest) {
|
||||
MesResponse responseObject = new MesResponse();
|
||||
try {
|
||||
checkPreconditions(responseObject, mesRequest);
|
||||
responseObject = interfaceConnection.mesStop(mesRequest);
|
||||
} catch (Throwable throwable) {
|
||||
handleThrowable(responseObject, throwable);
|
||||
} finally {
|
||||
logResponse(responseObject);
|
||||
}
|
||||
isActive = false;
|
||||
isConfigured = false;
|
||||
isConnected = false;
|
||||
if (interfaceConnection != null) {
|
||||
((IMesServicesChannel) interfaceConnection).shutdown();
|
||||
}
|
||||
return responseObject;
|
||||
}
|
||||
|
||||
public void out(String text) {
|
||||
System.out.println(LOG_PREFIX + "[MesServices][" + Thread.currentThread().getName() + "] " + text);
|
||||
}
|
||||
|
||||
public void err(String text) {
|
||||
System.err.println(LOG_PREFIX + "[MesServices][" + Thread.currentThread().getName() + "] " + text);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.itac.mes.yamaha;
|
||||
|
||||
public enum ResponseDetail {
|
||||
|
||||
// WARNINGS, HINTS: positive values
|
||||
//
|
||||
OK("", 0),
|
||||
// Plugin-ERRORS: negative values
|
||||
REQUEST_IS_NULL("request is null", -10001), //
|
||||
/** any call to MES before mesConfigure was called properly */
|
||||
PLUGIN_NOT_CONFIGURED("plugin not configured", -10002), //
|
||||
PLUGIN_NOT_ACTIVE("plugin not active", -10003), //
|
||||
PLUGIN_NOT_CONNECTED("plugin not connected " + ResponseDetail.MES_DATA_INTERFACE, -10004), //
|
||||
COMMUNICATION_FAILURE("communication failure", -10005), //
|
||||
WRONG_COMMUNICATION_PROPERTIES("communication properties wrong", -10006), //
|
||||
PLUGIN_VERSION_MISMATCH("plugin version mismatch", -10007), //
|
||||
// Errors from Data Interface negative values
|
||||
MES_NOT_CONNECTED(ResponseDetail.MES_DATA_INTERFACE + "is not connected", -20000), //
|
||||
MES_NOT_CONFIGURED_PROPERLY(ResponseDetail.MES_DATA_INTERFACE + "is not properly configured", -20001), //
|
||||
MES_NOT_INITIALIZED(ResponseDetail.MES_DATA_INTERFACE + "is not initialized", -20002), //
|
||||
PARSED_WITH_EXCEPTION(ResponseDetail.MES_DATA_INTERFACE + "caught an exception on parsing request", -20003), //
|
||||
PROCESSED_WITH_EXCEPTION(ResponseDetail.MES_DATA_INTERFACE + "caught an exception on processing request", -20004), //
|
||||
SERIALNUMBER_NOT_ALLOWED(ResponseDetail.MES_DATA_INTERFACE + "Serialnumber not allowed", -20005), //
|
||||
PARSE_PROBLEM(ResponseDetail.MES_DATA_INTERFACE + "has a problem parsing the request", -20006), //
|
||||
NOT_SENT(ResponseDetail.MES_DATA_INTERFACE + "did not sent data", -20007), //
|
||||
MES_SERVICE_NOT_REACHABLE("iTAC.MES.Suite service is not reachable", -20008), //
|
||||
;
|
||||
|
||||
private static final String MES_DATA_INTERFACE = "iTAC.MES.Suite DataInterface ";
|
||||
|
||||
private int code;
|
||||
private String text;
|
||||
|
||||
private ResponseDetail(String text, int code) {
|
||||
this.text = text;
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.itac.mes.yamaha;
|
||||
|
||||
public class YamahaException extends Exception {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -9180600020616111590L;
|
||||
private ResponseDetail responseDetail;
|
||||
|
||||
public YamahaException(ResponseDetail responseDetail) {
|
||||
this.responseDetail = responseDetail;
|
||||
}
|
||||
|
||||
public ResponseDetail getResponseDetail() {
|
||||
return responseDetail;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2008 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.yamaha.sockets;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Proxy;
|
||||
|
||||
import com.itac.mes.datainterface.data.IMesServicesLog;
|
||||
import com.itac.mes.datainterface.socket.BaseIhapHandler;
|
||||
import com.itac.mes.yamaha.IMesServicesChannel;
|
||||
|
||||
/**
|
||||
* This handler delegates IMesService calls to a socket server for Yamaha Interface
|
||||
*
|
||||
* @author frankp
|
||||
*
|
||||
*/
|
||||
public class IhapHandler extends BaseIhapHandler {
|
||||
|
||||
/**
|
||||
* This handler is responsible for calling all IMesServices functions at a socket server for this type.<br>
|
||||
*
|
||||
* @param host
|
||||
* the host where the server listens
|
||||
* @param port
|
||||
* the port the server listens
|
||||
* @param channelName
|
||||
* the name of the channel. As every channel has a unique name it is possible to debug server/client side
|
||||
* @param connectionStateCloseListener
|
||||
* detect wether a
|
||||
* @param classLoader
|
||||
* a classloader to override default class loader
|
||||
* @param log
|
||||
* the mesLog. if null prints direct to System.out/System.err
|
||||
* @return the reference to a base Handler
|
||||
* @throws IOException
|
||||
* thrown if no connection was established (server not available)
|
||||
*/
|
||||
public static IMesServicesChannel connect(String host, int port, String channelName,
|
||||
PropertyChangeListener connectionStateCloseListener, ClassLoader classLoader, IMesServicesLog log) throws IOException {
|
||||
|
||||
// create a default connection, not bound to any type
|
||||
BaseIhapHandler handler = createHandler(host, port, channelName, connectionStateCloseListener, classLoader, log);
|
||||
|
||||
// create a proxy for a specific type (Interface)
|
||||
IMesServicesChannel mesServiceChannel = (IMesServicesChannel) Proxy.newProxyInstance(IMesServicesChannel.class.getClassLoader(),
|
||||
new Class[] { IMesServicesChannel.class }, handler);
|
||||
|
||||
// set the channel name and transport it top server
|
||||
mesServiceChannel.setChannelName(channelName);
|
||||
return mesServiceChannel;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
BIN
interface/yamaha/plugin/src/resources/doc/overview.pdf
Normal file
BIN
interface/yamaha/plugin/src/resources/doc/overview.pdf
Normal file
Binary file not shown.
BIN
interface/yamaha/plugin/src/resources/doc/overview.pptx
Normal file
BIN
interface/yamaha/plugin/src/resources/doc/overview.pptx
Normal file
Binary file not shown.
661
interface/yamaha/plugin/src/resources/xsd/Yamaha.xsd
Normal file
661
interface/yamaha/plugin/src/resources/xsd/Yamaha.xsd
Normal file
@@ -0,0 +1,661 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
|
||||
|
||||
<xs:schema id="message" targetNamespace="yamaha.mes.itac.com" xmlns="com.yamaha.mes" xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:Q1="yamaha.mes.itac.com" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
|
||||
jxb:version="1.0">
|
||||
<xs:annotation>
|
||||
<xs:appinfo>
|
||||
<jxb:globalBindings>
|
||||
<jxb:javaType name="java.util.Date" xmlType="xs:dateTime" parseMethod="com.itac.mes.yamaha.DateAdapter.parseDate"
|
||||
printMethod="com.itac.mes.yamaha.DateAdapter.printDate" />
|
||||
</jxb:globalBindings>
|
||||
</xs:appinfo>
|
||||
</xs:annotation>
|
||||
|
||||
<xs:complexType name="Machine">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Complete information for a machine. Used in iTAC.MES.Suite to find a corresponding stationNumber.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="lineName" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The line name this machine belongs to</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="machineName" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The machine name as used in yamaha.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="stageName" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The name (or number) of a stage. May remain empty if stage is not available.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="CreateContainerRequest">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Requesting information about a container from MES
|
||||
or
|
||||
advicing MES to create a material(container) in MES
|
||||
which is known
|
||||
by yamaha.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
|
||||
<xs:element name="container" type="Q1:Container" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:annotation>
|
||||
<xs:documentation>list of containers
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="operation" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>0: request material from MES
|
||||
1: create Material in MES
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:annotation>
|
||||
<xs:documentation>0: request material from MES
|
||||
1: create Material
|
||||
in MES
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:enumeration value="0"></xs:enumeration>
|
||||
<xs:enumeration value="1"></xs:enumeration>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="CheckContainerRequest">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="container" type="Q1:Container" minOccurs="1" maxOccurs="unbounded"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="operation" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
0: set up material (container) 1: tear down
|
||||
a
|
||||
material (container) 2: marry a feeder
|
||||
with a material
|
||||
3: divorce
|
||||
a material from a
|
||||
feeder
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:enumeration value="0"></xs:enumeration>
|
||||
<xs:enumeration value="1"></xs:enumeration>
|
||||
<xs:enumeration value="2"></xs:enumeration>
|
||||
<xs:enumeration value="3"></xs:enumeration>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ItemProducedRequest">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="panelInfo" type="Q1:PanelInfo" minOccurs="0" maxOccurs="unbounded"></xs:element>
|
||||
<xs:element name="machinePlacements" type="Q1:MachinePlacement" minOccurs="0" maxOccurs="unbounded"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="serialNumber" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="placementRecipeName" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="orderId" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="state" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="startProduction" type="xs:dateTime"></xs:attribute>
|
||||
<xs:attribute name="endProduction" type="xs:dateTime"></xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="CheckContainerResponse">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesResponse">
|
||||
<xs:sequence>
|
||||
<xs:element name="container" type="Q1:Container" minOccurs="1" maxOccurs="unbounded">
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="operation" use="required">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:enumeration value="0"></xs:enumeration>
|
||||
<xs:enumeration value="1"></xs:enumeration>
|
||||
<xs:enumeration value="2"></xs:enumeration>
|
||||
<xs:enumeration value="3"></xs:enumeration>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MesResponse">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Every request is answered by a response, at least containing a totalresult for complete Operation and the
|
||||
request id from its corresponding request.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="errorDetails" type="Q1:ErrorDetail" minOccurs="0" maxOccurs="unbounded"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="requestId" type="xs:int" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
An value identifying the call. Every response has the same requestId as it's corresponding request.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="totalResult" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>0 = OK 1 = NOT_OK</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:annotation>
|
||||
<xs:documentation>0 = OK 1 = NOT_OK</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:enumeration value="0"></xs:enumeration>
|
||||
<xs:enumeration value="1"></xs:enumeration>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MesRequest">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Every request from yamaha to MES extends this message.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="requestId" type="xs:int" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>This is the request Id, to be found on both sides
|
||||
and both on request and response. This information
|
||||
could help on
|
||||
error analysis.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="eventDate" type="xs:dateTime" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The date and time a request is created.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InterlockingRequest">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="machine" type="Q1:Machine" minOccurs="1" maxOccurs="1" nillable="false">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The machine (or first machine of a line) where
|
||||
the barcode likes to enter.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="serialNumber" type="xs:string" minOccurs="1" maxOccurs="unbounded"></xs:element>
|
||||
</xs:sequence>
|
||||
|
||||
|
||||
<xs:attribute name="placementRecipeName" type="xs:string"></xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="InterlockingResponse">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
There are several resons why a
|
||||
barcode(serialnumber) may not enter a
|
||||
machine or line. 1) internal
|
||||
processing error. 2)
|
||||
serialnumber is unknown 3) serialnumber is not
|
||||
valid at this station 4)
|
||||
serialnumber is not processed
|
||||
at previous
|
||||
workstep
|
||||
5) serialnumber is not good
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesResponse">
|
||||
<xs:sequence>
|
||||
<xs:element name="serialNumber" type="Q1:PanelInfo" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
even if only one serialnumber was requested we
|
||||
may return a list of
|
||||
serialnumbers for a board (one
|
||||
for each
|
||||
panel)
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
||||
<xs:attribute name="placementRecipeName" type="xs:string"></xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlacementRecipeCheckRequest">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="machine" type="Q1:Machine" minOccurs="1" maxOccurs="1">
|
||||
<xs:annotation>
|
||||
<xs:documentation>expected: first producing machine in line
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="placementList" type="Q1:Placement" minOccurs="0" maxOccurs="unbounded"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="placementRecipeName" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="setupName" type="xs:string"></xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PlacementRecipeCheckResponse">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesResponse">
|
||||
<xs:sequence>
|
||||
<xs:element name="result" type="Q1:Placement" minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
only erroneous values are returned (wrong
|
||||
component, wrong
|
||||
designator, missing placements)
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="placementRecipeName" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="setupName" type="xs:string"></xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="CreateContainerResponse">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
returns 0 if the container was created by mes or if
|
||||
the
|
||||
container already exists in MES, otherwise 1.
|
||||
error may
|
||||
contain a
|
||||
more detailled information.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
|
||||
|
||||
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesResponse">
|
||||
<xs:sequence>
|
||||
<xs:element name="container" type="Q1:Container" minOccurs="0" maxOccurs="unbounded"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="operation" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
0: request material from MES 1: create
|
||||
Material
|
||||
in MES
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:int">
|
||||
<xs:enumeration value="0"></xs:enumeration>
|
||||
<xs:enumeration value="1"></xs:enumeration>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="HandlerPlacement">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A single placement from a container.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="designator" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The designator for a placement. Required information. e.g. R1 or C12.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="panelNumber" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The panel where a placement was performed. Required information, value is the panel number (counting from 1 up) or use -1 </xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MachineMessageRequest">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="machine" type="Q1:Machine" minOccurs="1" maxOccurs="1"></xs:element>
|
||||
|
||||
</xs:sequence>
|
||||
<xs:attribute name="messageText" type="xs:string" use="required"></xs:attribute>
|
||||
<xs:attribute name="messageStart" type="xs:dateTime" use="required"></xs:attribute>
|
||||
<xs:attribute name="messageStop" type="xs:dateTime" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The stop date for this message. If this date is
|
||||
before or equal to messageStart a default message
|
||||
time is used
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="messageDetail" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The message code for the machine message.
|
||||
If this
|
||||
code is not used in iTAC this event is ignored.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MachineStatusRequest">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Used whenever a machine changes its state.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="machine" type="Q1:Machine" minOccurs="1" maxOccurs="1">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The machine descriptor.</xs:documentation>
|
||||
</xs:annotation></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="status" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The new status for the machine. This status is valid from the (inherited field) eventDate.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MachinePlacement">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A machine placement contains the complete inventory for one machine, as well as all handlers with its information.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="handlerInfo" type="Q1:HandlerInfo" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:annotation>
|
||||
<xs:documentation>All handlers informations.</xs:documentation>
|
||||
</xs:annotation></xs:element>
|
||||
|
||||
<xs:element name="machine" type="Q1:Machine" minOccurs="1" maxOccurs="1">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The machine identifier for this machines placements.</xs:documentation>
|
||||
</xs:annotation></xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="PanelInfo">
|
||||
<xs:annotation>
|
||||
<xs:documentation>optional</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="panelName" type="xs:string"></xs:attribute>
|
||||
|
||||
<xs:attribute name="serialNumber" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
optional, only if the machine scans every single
|
||||
panel
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="panelNumber" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="status" type="xs:int" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>0 = good
|
||||
1 = rework
|
||||
2 = scrap (badmark)
|
||||
3 = unknown
|
||||
|
||||
totalresult is 0(OK) if all single serialnumbers for
|
||||
this board are
|
||||
good or
|
||||
scrap or unknown, but not all scrap
|
||||
totalresult is
|
||||
1(NOT_OK)if at least one single serialnumbers
|
||||
for this board is
|
||||
rework
|
||||
|
||||
yamaha should only evaluate the totalresult and may be
|
||||
displaying the
|
||||
error
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="HandlerInfo">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A material handler (feeder or tray server) with information about positions for handlers, used container an placements from each container.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:annotation>
|
||||
<xs:documentation>Information about placements and used container for a placement.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:element name="placement" type="Q1:HandlerPlacement" minOccurs="1" maxOccurs="unbounded">
|
||||
<xs:annotation>
|
||||
<xs:documentation>List of placements for this material Handler.</xs:documentation>
|
||||
</xs:annotation></xs:element>
|
||||
<xs:element name="container" type="Q1:Container" minOccurs="1" maxOccurs="1">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The container for this material handler. iTAC allows one container to be setup on more than one materialHandler</xs:documentation>
|
||||
</xs:annotation></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="table" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A table number or id where a feeder is placed.
|
||||
Required for feeders.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="handlerId" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The serialnumber of a handler (feeder or tray server). Optional information.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="track" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A track within a table where a feeder is placed. Used for generating a position in iTAC.MES.Suite. Required information for feeders.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="division" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A sub-division if one feeder has more than one reel on it. Use value 1 if not appplicable.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="tower" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The position of the tower. Used for tray server only. Value ignored for feeders.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="level" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The used level for a tower. Used for tray server only. Value ignored for feeders.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="verifiedDate" type="xs:dateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Date and time a container was verified. Optional information.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="pickAttempts" type="xs:int" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The number of picks for material for a single board. It is the sum of placed and wasted components.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="placed" type="xs:int" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The number of placed components for a single board. Required information.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="handlerType" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Used to identify the handler type. Could be a text like Feeder or Stick or Tray, or any other text. Optional information</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Container">
|
||||
<xs:annotation>
|
||||
<xs:documentation>One Container containing complete container information. Some information is optional.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:attribute name="containerId" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The unique Id of a container (e.g. a reel or stick or tray). This information is always required.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="componentId" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The component Id (in iTAC: partNumber) for this container. Minimum required information for creating containers in iTAC.MES.Suite.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="initialQuantity" type="xs:int" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Initial quantity as declared by the supplier. Minimum required information for creating containers in iTAC.MES.Suite.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="actualQuantity" type="xs:int" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>In a request this field must contain the actual quantity for a container. Its response message could contain a differing value; in this case yamaha should process
|
||||
the changed value and adjust its quantity for this container.
|
||||
|
||||
When a material should be created in MES and the actualQuantity differs from initialQuantity the actual quantity is adjusted in MES.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="supplierNumber" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Optional supplier number if a material should be
|
||||
created
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="supplierName" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Optional supplier name if a material should be
|
||||
created
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="lot" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The lot a reel belongs to. This information is
|
||||
optional, also known as a batch number
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="dateCode" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A reels datecode as provided by a supplier.
|
||||
optional
|
||||
information.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="expirationDate" type="xs:dateTime">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The date when a container expires because of MSL. Use December 31 3000 if this container does never expires. Used for request and response.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="state" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A container state as used in iTAC.MES.Suite. Only used in response messages; Its content in requests will be ignored.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="incomingRefNumber" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>An incoming reference number for a container. Optional information.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
<xs:attribute name="classification" type="xs:string">
|
||||
<xs:annotation>
|
||||
<xs:documentation>For LEDs a lightning class, optional information.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
|
||||
<xs:attribute name="errorText" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Detailled result for a single Container Request
|
||||
(information about resolving or creating container).
|
||||
Only used in a response message. Leave it null or better set it empty.</xs:documentation>
|
||||
</xs:annotation></xs:attribute>
|
||||
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MaterialConsumedRequest">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesRequest">
|
||||
<xs:sequence>
|
||||
<xs:element name="machine" type="Q1:Machine" minOccurs="0" maxOccurs="1"></xs:element>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="reelId" type="xs:string"></xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="MesConfigurationResponse">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="Q1:MesResponse">
|
||||
<xs:attribute name="isLineBased" type="xs:boolean" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
true: return consolidated trace information
|
||||
for
|
||||
all machines of one line; false: return
|
||||
one trace
|
||||
information per
|
||||
machine in a line;
|
||||
if a machine is in "passthrough-mode add
|
||||
info
|
||||
about last producing machine for this
|
||||
line.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="Placement">
|
||||
<xs:attribute name="panelName" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Never empty, if unknown use 1</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="componentId" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>the component name for this placement (not the
|
||||
reelId)</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="designator" type="xs:string" use="required">
|
||||
<xs:annotation>
|
||||
<xs:documentation>The reference designator for this placement, e.g.
|
||||
R12, IC1</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
<xs:attribute name="resultString" type="xs:string" use="optional">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Only used as a return value.</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:attribute>
|
||||
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="ErrorDetail">
|
||||
<xs:attribute name="detail" type="xs:string"></xs:attribute>
|
||||
<xs:attribute name="code" type="xs:int" use="required"></xs:attribute>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.itac.mes.yamaha;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.Matchers;
|
||||
|
||||
import com.itac.mes.yamaha.data.MesConfigurationResponse;
|
||||
import com.itac.mes.yamaha.data.MesRequest;
|
||||
|
||||
public class MesServicesTest {
|
||||
|
||||
@Test
|
||||
public void test() throws IOException {
|
||||
MesServices out = new MesServices();
|
||||
|
||||
MesServices spyServices = spy(out);
|
||||
doReturn(null).when(spyServices).getConnection(anyString(), Matchers.any(PropertyChangeListener.class));
|
||||
|
||||
MesConfigurationResponse k = spyServices.mesGetConfiguration(null);
|
||||
assertEquals(1, k.getTotalResult());
|
||||
|
||||
MesRequest mesRequest = new MesRequest();
|
||||
k = spyServices.mesGetConfiguration(mesRequest);
|
||||
assertEquals(1, k.getTotalResult());
|
||||
|
||||
mesRequest.setRequestId(100);
|
||||
k = spyServices.mesGetConfiguration(mesRequest);
|
||||
assertEquals(1, k.getTotalResult());
|
||||
|
||||
mesRequest.setEventDate(new Date());
|
||||
k = spyServices.mesGetConfiguration(mesRequest);
|
||||
assertEquals(1, k.getTotalResult());
|
||||
|
||||
// System.setProperty(IMesServices.MES_HOST, "localhost");
|
||||
// System.setProperty(IMesServices.MES_PORT, "32000");
|
||||
//
|
||||
// MesResponse response = spyServices.mesStart(mesRequest);
|
||||
// assertEquals(1, response.getTotalResult());
|
||||
//
|
||||
// System.setProperty(IMesServices.MES_LOG_DETAILS, "true"); // or "false"
|
||||
// System.setProperty(IMesServices.MES_LOG_PREFIX, "iTAC.MES.Suite Yamaha Plugin: ");
|
||||
//
|
||||
// response = spyServices.mesStart(mesRequest);
|
||||
// assertEquals(1, response.getTotalResult());
|
||||
//
|
||||
// IMesServices intfConnMock = mock(IMesServices.class);
|
||||
// MesResponse mesStartResponse = new MesResponse();
|
||||
// mesStartResponse.setRequestId(102);
|
||||
// mesStartResponse.setTotalResult(0);
|
||||
// when(intfConnMock.mesStart(any(MesRequest.class))).thenReturn(mesStartResponse );
|
||||
// doReturn(intfConnMock ).when(spyServices).getConnection(anyString(), Matchers.any(PropertyChangeListener.class));
|
||||
// response = spyServices.mesStart(mesRequest);
|
||||
// assertEquals(1, response.getTotalResult());
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
Manifest-Version: 1.0
|
||||
Built-By: frankp
|
||||
Build-Jdk: 1.8.0_111
|
||||
Created-By: Maven Integration for Eclipse
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#Generated by Maven Integration for Eclipse
|
||||
#Tue Oct 13 14:05:18 CEST 2020
|
||||
version=9.10.00beta-DEVELOPER
|
||||
groupId=com.itac.interface.interfaces
|
||||
m2e.projectName=data-interface-yamaha-plugin
|
||||
m2e.projectLocation=C\:\\projects_jee\\imsinterface\\mainline\\interface\\yamaha\\plugin
|
||||
artifactId=data-interface-yamaha-plugin
|
||||
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.itac.interface.interfaces</groupId>
|
||||
<artifactId>data-interface-yamaha-plugin</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>data-interface-yamaha-plugin</name>
|
||||
<version>${mes.interface.version}</version>
|
||||
<parent>
|
||||
<groupId>com.itac.interface.interfaces</groupId>
|
||||
<artifactId>data-interface-yamaha</artifactId>
|
||||
<version>${mes.interface.version}</version>
|
||||
</parent>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.itac.product</groupId>
|
||||
<artifactId>artes-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.itac.interface.yamaha</groupId>
|
||||
<artifactId>yamaha-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.itac.interface.interfaces</groupId>
|
||||
<artifactId>data-interface-core-definition</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>create-project-bundle</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>zippackaging</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
<classifier>zip</classifier>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/descriptor.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,5 @@
|
||||
#Generated by Maven
|
||||
#Tue Jun 12 15:24:13 CEST 2018
|
||||
version=9.00.01alpha-DEVELOPER
|
||||
groupId=com.itac.interface.interfaces
|
||||
artifactId=data-interface-yamaha-plugin
|
||||
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<testsuite tests="1" failures="0" name="com.itac.mes.yamaha.MesServicesTest" time="0.36" errors="0" skipped="0">
|
||||
<properties>
|
||||
<property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
|
||||
<property name="sun.boot.library.path" value="C:\Program Files\Java\jdk1.8.0_111\jre\bin"/>
|
||||
<property name="java.vm.version" value="25.111-b14"/>
|
||||
<property name="java.vm.vendor" value="Oracle Corporation"/>
|
||||
<property name="maven.multiModuleProjectDirectory" value="C:\projects_jee\imsinterface\mainline"/>
|
||||
<property name="java.vendor.url" value="http://java.oracle.com/"/>
|
||||
<property name="path.separator" value=";"/>
|
||||
<property name="guice.disable.misplaced.annotation.check" value="true"/>
|
||||
<property name="java.vm.name" value="Java HotSpot(TM) 64-Bit Server VM"/>
|
||||
<property name="file.encoding.pkg" value="sun.io"/>
|
||||
<property name="user.script" value=""/>
|
||||
<property name="user.country" value="DE"/>
|
||||
<property name="sun.java.launcher" value="SUN_STANDARD"/>
|
||||
<property name="sun.os.patch.level" value=""/>
|
||||
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
|
||||
<property name="user.dir" value="C:\projects_jee\imsinterface\mainline"/>
|
||||
<property name="java.runtime.version" value="1.8.0_111-b14"/>
|
||||
<property name="java.awt.graphicsenv" value="sun.awt.Win32GraphicsEnvironment"/>
|
||||
<property name="java.endorsed.dirs" value="C:\Program Files\Java\jdk1.8.0_111\jre\lib\endorsed"/>
|
||||
<property name="os.arch" value="amd64"/>
|
||||
<property name="java.io.tmpdir" value="C:\Users\frankp\AppData\Local\Temp\"/>
|
||||
<property name="line.separator" value="
|
||||
"/>
|
||||
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
|
||||
<property name="user.variant" value=""/>
|
||||
<property name="os.name" value="Windows 10"/>
|
||||
<property name="classworlds.conf" value="C:\maven\apache-maven-3.3.3\bin\..\bin\m2.conf"/>
|
||||
<property name="sun.jnu.encoding" value="Cp1252"/>
|
||||
<property name="java.library.path" value="C:\Program Files\Java\jdk1.8.0_111\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\MKS\IntegrityClient\bin;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\ProgramData\Oracle\Java\javapath;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\MKS\Toolkit\mksnt;%USERPROFILE%\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\maven\maven;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\Users\frankp\AppData\Local\Microsoft\WindowsApps;C:\Users\frankp\AppData\Roaming\npm;c:\Program Files\nodejs\;."/>
|
||||
<property name="java.specification.name" value="Java Platform API Specification"/>
|
||||
<property name="java.class.version" value="52.0"/>
|
||||
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
|
||||
<property name="os.version" value="10.0"/>
|
||||
<property name="user.home" value="C:\Users\frankp"/>
|
||||
<property name="user.timezone" value="Europe/Berlin"/>
|
||||
<property name="java.awt.printerjob" value="sun.awt.windows.WPrinterJob"/>
|
||||
<property name="java.specification.version" value="1.8"/>
|
||||
<property name="file.encoding" value="Cp1252"/>
|
||||
<property name="user.name" value="frankp"/>
|
||||
<property name="java.class.path" value="C:\maven\apache-maven-3.3.3\bin\..\boot\plexus-classworlds-2.5.2.jar"/>
|
||||
<property name="java.vm.specification.version" value="1.8"/>
|
||||
<property name="sun.arch.data.model" value="64"/>
|
||||
<property name="java.home" value="C:\Program Files\Java\jdk1.8.0_111\jre"/>
|
||||
<property name="sun.java.command" value="org.codehaus.plexus.classworlds.launcher.Launcher clean install -rf :data-interface-fuji"/>
|
||||
<property name="java.specification.vendor" value="Oracle Corporation"/>
|
||||
<property name="user.language" value="de"/>
|
||||
<property name="awt.toolkit" value="sun.awt.windows.WToolkit"/>
|
||||
<property name="java.vm.info" value="mixed mode"/>
|
||||
<property name="java.version" value="1.8.0_111"/>
|
||||
<property name="java.ext.dirs" value="C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext"/>
|
||||
<property name="sun.boot.class.path" value="C:\Program Files\Java\jdk1.8.0_111\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_111\jre\classes"/>
|
||||
<property name="sun.stderr.encoding" value="cp850"/>
|
||||
<property name="java.vendor" value="Oracle Corporation"/>
|
||||
<property name="maven.home" value="C:\maven\apache-maven-3.3.3\bin\.."/>
|
||||
<property name="file.separator" value="\"/>
|
||||
<property name="java.vendor.url.bug" value="http://bugreport.sun.com/bugreport/"/>
|
||||
<property name="sun.cpu.endian" value="little"/>
|
||||
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
|
||||
<property name="sun.desktop" value="windows"/>
|
||||
<property name="sun.cpu.isalist" value="amd64"/>
|
||||
</properties>
|
||||
<testcase classname="com.itac.mes.yamaha.MesServicesTest" name="test" time="0.36"/>
|
||||
</testsuite>
|
||||
@@ -0,0 +1,4 @@
|
||||
-------------------------------------------------------------------------------
|
||||
Test set: com.itac.mes.yamaha.MesServicesTest
|
||||
-------------------------------------------------------------------------------
|
||||
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.438 sec
|
||||
Binary file not shown.
Reference in New Issue
Block a user