mirror of
https://github.com/luoyan35714/OPC_Client.git
synced 2026-04-18 00:01:30 +08:00
Add the Utgard resources
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
public interface Categories
|
||||
{
|
||||
public static final String OPCDAServer10 = "63D5F430-CFE4-11d1-B2C8-0060083BA1FB";
|
||||
|
||||
public static final String OPCDAServer20 = "63D5F432-CFE4-11d1-B2C8-0060083BA1FB";
|
||||
|
||||
public static final String OPCDAServer30 = "CC603642-66D7-48f1-B69A-B625E73652D7";
|
||||
|
||||
public static final String XMLDAServer10 = "3098EDA4-A006-48b2-A27F-247453959408";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
public interface Constants
|
||||
{
|
||||
public static final String IConnectionPointContainer_IID = "B196B284-BAB4-101A-B69C-00AA00341D07";
|
||||
|
||||
public static final String IConnectionPoint_IID = "B196B286-BAB4-101A-B69C-00AA00341D07";
|
||||
|
||||
public static final String IOPCCommon_IID = "F31DFDE2-07B6-11D2-B2D8-0060083BA1FB";
|
||||
|
||||
public static final String IEnumString_IID = "00000101-0000-0000-C000-000000000046";
|
||||
|
||||
public static final String IEnumGUID_IID = "0002E000-0000-0000-C000-000000000046";
|
||||
|
||||
public static final int S_OK = 0;
|
||||
|
||||
public static final int S_FALSE = 1;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
|
||||
public interface EventHandler
|
||||
{
|
||||
public String getIdentifier ();
|
||||
|
||||
public IJIComObject getObject ();
|
||||
|
||||
public void detach () throws JIException;
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Calendar;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
|
||||
public class FILETIME
|
||||
{
|
||||
private int high = 0;
|
||||
|
||||
private int low = 0;
|
||||
|
||||
public FILETIME ()
|
||||
{
|
||||
}
|
||||
|
||||
public FILETIME ( final FILETIME arg0 )
|
||||
{
|
||||
this.high = arg0.high;
|
||||
this.low = arg0.low;
|
||||
}
|
||||
|
||||
public FILETIME ( final int high, final int low )
|
||||
{
|
||||
this.high = high;
|
||||
this.low = low;
|
||||
}
|
||||
|
||||
public int getHigh ()
|
||||
{
|
||||
return this.high;
|
||||
}
|
||||
|
||||
public void setHigh ( final int high )
|
||||
{
|
||||
this.high = high;
|
||||
}
|
||||
|
||||
public int getLow ()
|
||||
{
|
||||
return this.low;
|
||||
}
|
||||
|
||||
public void setLow ( final int low )
|
||||
{
|
||||
this.low = low;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode ()
|
||||
{
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = PRIME * result + this.high;
|
||||
result = PRIME * result + this.low;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals ( final Object obj )
|
||||
{
|
||||
if ( this == obj )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if ( obj == null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ( getClass () != obj.getClass () )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
final FILETIME other = (FILETIME)obj;
|
||||
if ( this.high != other.high )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ( this.low != other.low )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static JIStruct getStruct () throws JIException
|
||||
{
|
||||
final JIStruct struct = new JIStruct ();
|
||||
|
||||
struct.addMember ( Integer.class );
|
||||
struct.addMember ( Integer.class );
|
||||
|
||||
return struct;
|
||||
}
|
||||
|
||||
public static FILETIME fromStruct ( final JIStruct struct )
|
||||
{
|
||||
final FILETIME ft = new FILETIME ();
|
||||
|
||||
ft.setLow ( (Integer)struct.getMember ( 0 ) );
|
||||
ft.setHigh ( (Integer)struct.getMember ( 1 ) );
|
||||
|
||||
return ft;
|
||||
}
|
||||
|
||||
public Calendar asCalendar ()
|
||||
{
|
||||
final Calendar c = Calendar.getInstance ();
|
||||
|
||||
/*
|
||||
* The following "strange" stuff is needed since we miss a ulong type
|
||||
*/
|
||||
long i = 0xFFFFFFFFL & this.high;
|
||||
i = i << 32;
|
||||
long j = 0xFFFFFFFFFFFFFFFFL & i;
|
||||
|
||||
i = 0xFFFFFFFFL & this.low;
|
||||
j += i;
|
||||
j /= 10000L;
|
||||
j -= 11644473600000L;
|
||||
|
||||
c.setTimeInMillis ( j );
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
public Calendar asBigDecimalCalendar ()
|
||||
{
|
||||
final Calendar c = Calendar.getInstance ();
|
||||
|
||||
/*
|
||||
* The following "strange" stuff is needed since we miss a ulong type
|
||||
*/
|
||||
long i = 0xFFFFFFFFL & this.high;
|
||||
i = i << 32;
|
||||
BigDecimal d1 = new BigDecimal ( 0xFFFFFFFFFFFFFFFFL & i );
|
||||
|
||||
i = 0xFFFFFFFFL & this.low;
|
||||
d1 = d1.add ( new BigDecimal ( i ) );
|
||||
d1 = d1.divide ( new BigDecimal ( 10000L ) );
|
||||
d1 = d1.subtract ( new BigDecimal ( 11644473600000L ) );
|
||||
|
||||
c.setTimeInMillis ( d1.longValue () );
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString ()
|
||||
{
|
||||
return String.format ( "%s/%s", this.high, this.low );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
public class KeyedResult<K, V> extends Result<V>
|
||||
{
|
||||
private K key;
|
||||
|
||||
public KeyedResult ()
|
||||
{
|
||||
super ();
|
||||
}
|
||||
|
||||
public KeyedResult ( final K key, final V value, final int errorCode )
|
||||
{
|
||||
super ( value, errorCode );
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public K getKey ()
|
||||
{
|
||||
return this.key;
|
||||
}
|
||||
|
||||
public void setKey ( final K key )
|
||||
{
|
||||
this.key = key;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2012 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class KeyedResultSet<K, V> extends ArrayList<KeyedResult<K, V>>
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public KeyedResultSet ()
|
||||
{
|
||||
super ();
|
||||
}
|
||||
|
||||
public KeyedResultSet ( final int size )
|
||||
{
|
||||
super ( size ); // me
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
*
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
* Copyright (C) 2013 Jens Reimann (ctron@dentrassi.de)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
public class Result<T>
|
||||
{
|
||||
private T value;
|
||||
|
||||
private int errorCode;
|
||||
|
||||
public Result ()
|
||||
{
|
||||
}
|
||||
|
||||
public Result ( final T value, final int errorCode )
|
||||
{
|
||||
this.value = value;
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public int getErrorCode ()
|
||||
{
|
||||
return this.errorCode;
|
||||
}
|
||||
|
||||
public void setErrorCode ( final int errorCode )
|
||||
{
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
public T getValue ()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public void setValue ( final T value )
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public boolean isFailed ()
|
||||
{
|
||||
return this.errorCode != 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ResultSet<T> extends ArrayList<Result<T>>
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 6392417310208978252L;
|
||||
|
||||
public ResultSet ()
|
||||
{
|
||||
super ();
|
||||
}
|
||||
|
||||
public ResultSet ( final int size )
|
||||
{
|
||||
super ( size ); // me
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
*
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
* Copyright (C) 2013 Jens Reimann (ctron@dentrassi.de)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common.impl;
|
||||
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
|
||||
public class BaseCOMObject
|
||||
{
|
||||
private IJIComObject comObject = null;
|
||||
|
||||
/**
|
||||
* Create a new base COM object
|
||||
*
|
||||
* @param comObject
|
||||
* The COM object to wrap but be addRef'ed
|
||||
*/
|
||||
public BaseCOMObject ( final IJIComObject comObject )
|
||||
{
|
||||
this.comObject = comObject;
|
||||
}
|
||||
|
||||
protected synchronized IJIComObject getCOMObject ()
|
||||
{
|
||||
return this.comObject;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
|
||||
import rpc.core.UUID;
|
||||
|
||||
public class EnumGUID extends BaseCOMObject
|
||||
{
|
||||
public static final int DEFAULT_BATCH_SIZE = Integer.getInteger ( "openscada.dcom.enum-batch-size", 10 );
|
||||
|
||||
public EnumGUID ( final IJIComObject enumStringObject ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( enumStringObject.queryInterface ( org.openscada.opc.dcom.common.Constants.IEnumGUID_IID ) );
|
||||
}
|
||||
|
||||
public int next ( final List<UUID> list, final int num ) throws JIException
|
||||
{
|
||||
if ( num <= 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addInParamAsInt ( num, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( num, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIArray ( UUID.class, null, 1, true, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
UUID[] resultData = (UUID[]) ( (JIArray)result[0] ).getArrayInstance ();
|
||||
Integer cnt = (Integer)result[1];
|
||||
|
||||
for ( int i = 0; i < cnt; i++ )
|
||||
{
|
||||
list.add ( resultData[i] );
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
public Collection<UUID> next ( final int num ) throws JIException
|
||||
{
|
||||
List<UUID> list = new ArrayList<UUID> ( num );
|
||||
next ( list, num );
|
||||
return list;
|
||||
}
|
||||
|
||||
public void skip ( final int num ) throws JIException
|
||||
{
|
||||
if ( num <= 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addInParamAsInt ( num, JIFlags.FLAG_NULL );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public void reset () throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public EnumGUID cloneObject () throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
IJIComObject object = (IJIComObject)result[0];
|
||||
|
||||
return new EnumGUID ( object );
|
||||
}
|
||||
|
||||
public Collection<UUID> asCollection ( final int batchSize ) throws JIException
|
||||
{
|
||||
reset ();
|
||||
|
||||
List<UUID> data = new ArrayList<UUID> ();
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
i = next ( data, batchSize );
|
||||
} while ( i == batchSize );
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public Collection<UUID> asCollection () throws JIException
|
||||
{
|
||||
return asCollection ( DEFAULT_BATCH_SIZE );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
|
||||
public class EnumString extends BaseCOMObject
|
||||
{
|
||||
public static final int DEFAULT_BATCH_SIZE = Integer.getInteger ( "openscada.dcom.enum-batch-size", 10 );
|
||||
|
||||
public EnumString ( final IJIComObject enumStringObject ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( enumStringObject.queryInterface ( org.openscada.opc.dcom.common.Constants.IEnumString_IID ) );
|
||||
}
|
||||
|
||||
public int next ( final List<String> list, final int num ) throws JIException
|
||||
{
|
||||
if ( num <= 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addInParamAsInt ( num, JIFlags.FLAG_NULL );
|
||||
//callObject.addInParamAsInt ( num, JIFlags.FLAG_NULL );
|
||||
//callObject.addOutParamAsObject ( new JIArray ( new JIPointer ( new JIString (
|
||||
// JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ), null, 1, true, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIArray ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ), null, 1, true, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
//JIPointer[] resultData = (JIPointer[]) ( (JIArray) ( result[0] ) ).getArrayInstance ();
|
||||
JIString[] resultData = (JIString[]) ( (JIArray)result[0] ).getArrayInstance ();
|
||||
Integer cnt = (Integer)result[1];
|
||||
|
||||
for ( int i = 0; i < cnt; i++ )
|
||||
{
|
||||
//list.add ( ( (JIString)resultData[i].getReferent () ).getString () );
|
||||
list.add ( resultData[i].getString () );
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
public Collection<String> next ( final int num ) throws JIException
|
||||
{
|
||||
List<String> list = new ArrayList<String> ( num );
|
||||
next ( list, num );
|
||||
return list;
|
||||
}
|
||||
|
||||
public void skip ( final int num ) throws JIException
|
||||
{
|
||||
if ( num <= 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addInParamAsInt ( num, JIFlags.FLAG_NULL );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public void reset () throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public EnumString cloneObject () throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
IJIComObject object = (IJIComObject)result[0];
|
||||
return new EnumString ( object );
|
||||
}
|
||||
|
||||
public Collection<String> asCollection ( final int batchSize ) throws JIException
|
||||
{
|
||||
reset ();
|
||||
|
||||
List<String> data = new ArrayList<String> ();
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
i = next ( data, batchSize );
|
||||
} while ( i == batchSize );
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public Collection<String> asCollection () throws JIException
|
||||
{
|
||||
return asCollection ( DEFAULT_BATCH_SIZE );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common.impl;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIFrameworkHelper;
|
||||
import org.openscada.opc.dcom.common.EventHandler;
|
||||
|
||||
public class EventHandlerImpl implements EventHandler
|
||||
{
|
||||
private String identifier = null;
|
||||
|
||||
private IJIComObject object = null;
|
||||
|
||||
public String getIdentifier ()
|
||||
{
|
||||
return this.identifier;
|
||||
}
|
||||
|
||||
public synchronized IJIComObject getObject ()
|
||||
{
|
||||
return this.object;
|
||||
}
|
||||
|
||||
public synchronized void setInfo ( final IJIComObject object, final String identifier )
|
||||
{
|
||||
this.object = object;
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
public synchronized void detach () throws JIException
|
||||
{
|
||||
if ( this.object != null && this.identifier != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
JIFrameworkHelper.detachEventHandler ( this.object, this.identifier );
|
||||
}
|
||||
finally
|
||||
{
|
||||
this.object = null;
|
||||
this.identifier = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common.impl;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
|
||||
public class Helper
|
||||
{
|
||||
/**
|
||||
* Make the COM call but do not treat S_FALSE as error condition for the whole call
|
||||
* @param object the object to make to call on
|
||||
* @param callObject the call object
|
||||
* @return the result of the call
|
||||
* @throws JIException
|
||||
*/
|
||||
public static Object[] callRespectSFALSE ( final IJIComObject object, final JICallBuilder callObject ) throws JIException
|
||||
{
|
||||
try
|
||||
{
|
||||
return object.call ( callObject );
|
||||
}
|
||||
catch ( JIException e )
|
||||
{
|
||||
if ( e.getErrorCode () != org.openscada.opc.dcom.common.Constants.S_FALSE )
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
return callObject.getResultsInCaseOfException ();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform some fixes on the variant when writing it to OPC items. This method
|
||||
* only changes control information on the variant and not the value itself!
|
||||
* @param value the value to fix
|
||||
* @return the fixed value
|
||||
* @throws JIException In case something goes wrong
|
||||
*/
|
||||
public static JIVariant fixVariant ( final JIVariant value ) throws JIException
|
||||
{
|
||||
if ( value.isArray () )
|
||||
{
|
||||
if ( value.getObjectAsArray ().getArrayInstance () instanceof Boolean[] )
|
||||
{
|
||||
value.setFlag ( JIFlags.FLAG_REPRESENTATION_VARIANT_BOOL );
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.common.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
|
||||
public class OPCCommon extends BaseCOMObject
|
||||
{
|
||||
public OPCCommon ( final IJIComObject opcObject ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcObject.queryInterface ( org.openscada.opc.dcom.common.Constants.IOPCCommon_IID ) );
|
||||
}
|
||||
|
||||
public void setLocaleID ( final int localeID ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addInParamAsInt ( localeID, JIFlags.FLAG_NULL );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public int getLocaleID () throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addOutParamAsObject ( Integer.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
return (Integer)result[0];
|
||||
}
|
||||
|
||||
public String getErrorString ( final int errorCode, final int localeID ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addInParamAsInt ( errorCode, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( localeID, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
return ( (JIString) ( (JIPointer)result[0] ).getReferent () ).getString ();
|
||||
}
|
||||
|
||||
public void setClientName ( final String clientName ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 4 );
|
||||
|
||||
callObject.addInParamAsString ( clientName, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public Collection<Integer> queryAvailableLocaleIDs () throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
JIArray resultArray = (JIArray) ( (JIPointer)result[1] ).getReferent ();
|
||||
Integer[] intArray = (Integer[])resultArray.getArrayInstance ();
|
||||
|
||||
return Arrays.asList ( intArray );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public interface Constants extends org.openscada.opc.dcom.common.Constants
|
||||
{
|
||||
public static final String IOPCServer_IID = "39C13A4D-011E-11D0-9675-0020AFD8ADB3";
|
||||
|
||||
public static final String IOPCGroupStateMgt_IID = "39C13A50-011E-11D0-9675-0020AFD8ADB3";
|
||||
|
||||
public static final String IOPCBrowse_IID = "39227004-A18F-4B57-8B0A-5235670F4468";
|
||||
|
||||
public static final String IOPCBrowseServerAddressSpace_IID = "39C13A4F-011E-11D0-9675-0020AFD8ADB3";
|
||||
|
||||
public static final String IOPCItemMgt_IID = "39C13A54-011E-11D0-9675-0020AFD8ADB3";
|
||||
|
||||
public static final String IOPCItemProperties_IID = "39C13A72-011E-11D0-9675-0020AFD8ADB3";
|
||||
|
||||
public static final String IOPCItemIO_IID = "85C0B427-2893-4CBC-BD78-E5FC5146F08F";
|
||||
|
||||
public static final String IOPCDataCallback_IID = "39C13A70-011E-11D0-9675-0020AFD8ADB3";
|
||||
|
||||
public static final String IOPCAsyncIO2_IID = "39C13A71-011E-11D0-9675-0020AFD8ADB3";
|
||||
|
||||
public static final String IOPCSyncIO_IID = "39C13A52-011E-11D0-9675-0020AFD8ADB3";
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
import org.openscada.opc.dcom.common.KeyedResultSet;
|
||||
import org.openscada.opc.dcom.common.ResultSet;
|
||||
|
||||
public interface IOPCDataCallback
|
||||
{
|
||||
public void dataChange ( int transactionId, int serverGroupHandle, int masterQuality, int masterErrorCode, KeyedResultSet<Integer, ValueData> result );
|
||||
|
||||
public void readComplete ( int transactionId, int serverGroupHandle, int masterQuality, int masterErrorCode, KeyedResultSet<Integer, ValueData> result );
|
||||
|
||||
public void writeComplete ( int transactionId, int serverGroupHandle, int masterErrorCode, ResultSet<Integer> result );
|
||||
|
||||
public void cancelComplete ( int transactionId, int serverGroupHandle );
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
*
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
* Copyright (C) 2013 Jens Reimann (ctron@dentrassi.de)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public class IORequest
|
||||
{
|
||||
private String itemID;
|
||||
|
||||
private int maxAge;
|
||||
|
||||
public IORequest ( final String itemID, final int maxAge )
|
||||
{
|
||||
this.itemID = itemID;
|
||||
this.maxAge = maxAge;
|
||||
}
|
||||
|
||||
public String getItemID ()
|
||||
{
|
||||
return this.itemID;
|
||||
}
|
||||
|
||||
public void setItemID ( final String itemID )
|
||||
{
|
||||
this.itemID = itemID;
|
||||
}
|
||||
|
||||
public int getMaxAge ()
|
||||
{
|
||||
return this.maxAge;
|
||||
}
|
||||
|
||||
public void setMaxAge ( final int maxAge )
|
||||
{
|
||||
this.maxAge = maxAge;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public enum OPCBROWSEDIRECTION
|
||||
{
|
||||
OPC_BROWSE_UP ( 1 ),
|
||||
OPC_BROWSE_DOWN ( 2 ),
|
||||
OPC_BROWSE_TO ( 3 ),
|
||||
OPC_BROWSE_UNKNOWN ( 0 );
|
||||
|
||||
private int _id;
|
||||
|
||||
private OPCBROWSEDIRECTION ( final int id )
|
||||
{
|
||||
this._id = id;
|
||||
}
|
||||
|
||||
public int id ()
|
||||
{
|
||||
return this._id;
|
||||
}
|
||||
|
||||
public static OPCBROWSEDIRECTION fromID ( final int id )
|
||||
{
|
||||
switch ( id )
|
||||
{
|
||||
case 1:
|
||||
return OPC_BROWSE_UP;
|
||||
case 2:
|
||||
return OPC_BROWSE_DOWN;
|
||||
case 3:
|
||||
return OPC_BROWSE_TO;
|
||||
default:
|
||||
return OPC_BROWSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public enum OPCBROWSETYPE
|
||||
{
|
||||
OPC_BRANCH ( 1 ),
|
||||
OPC_LEAF ( 2 ),
|
||||
OPC_FLAT ( 3 ),
|
||||
OPC_UNKNOWN ( 0 );
|
||||
|
||||
private int _id;
|
||||
|
||||
private OPCBROWSETYPE ( final int id )
|
||||
{
|
||||
this._id = id;
|
||||
}
|
||||
|
||||
public int id ()
|
||||
{
|
||||
return this._id;
|
||||
}
|
||||
|
||||
public static OPCBROWSETYPE fromID ( final int id )
|
||||
{
|
||||
switch ( id )
|
||||
{
|
||||
case 1:
|
||||
return OPC_BRANCH;
|
||||
case 2:
|
||||
return OPC_LEAF;
|
||||
case 3:
|
||||
return OPC_FLAT;
|
||||
default:
|
||||
return OPC_UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public enum OPCDATASOURCE
|
||||
{
|
||||
OPC_DS_CACHE ( 1 ),
|
||||
OPC_DS_DEVICE ( 2 ),
|
||||
OPC_DS_UNKNOWN ( 0 );
|
||||
|
||||
private int _id;
|
||||
|
||||
private OPCDATASOURCE ( final int id )
|
||||
{
|
||||
this._id = id;
|
||||
}
|
||||
|
||||
public int id ()
|
||||
{
|
||||
return this._id;
|
||||
}
|
||||
|
||||
public static OPCDATASOURCE fromID ( final int id )
|
||||
{
|
||||
switch ( id )
|
||||
{
|
||||
case 1:
|
||||
return OPC_DS_CACHE;
|
||||
case 2:
|
||||
return OPC_DS_DEVICE;
|
||||
default:
|
||||
return OPC_DS_UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public enum OPCENUMSCOPE
|
||||
{
|
||||
OPC_ENUM_PRIVATE_CONNECTIONS ( 1 ),
|
||||
OPC_ENUM_PUBLIC_CONNECTIONS ( 2 ),
|
||||
OPC_ENUM_ALL_CONNECTIONS ( 3 ),
|
||||
OPC_ENUM_PRIVATE ( 4 ),
|
||||
OPC_ENUM_PUBLIC ( 5 ),
|
||||
OPC_ENUM_ALL ( 6 ),
|
||||
OPC_ENUM_UNKNOWN ( 0 );
|
||||
|
||||
private int _id;
|
||||
|
||||
private OPCENUMSCOPE ( final int id )
|
||||
{
|
||||
this._id = id;
|
||||
}
|
||||
|
||||
public int id ()
|
||||
{
|
||||
return this._id;
|
||||
}
|
||||
|
||||
public static OPCENUMSCOPE fromID ( final int id )
|
||||
{
|
||||
switch ( id )
|
||||
{
|
||||
case 1:
|
||||
return OPC_ENUM_PRIVATE_CONNECTIONS;
|
||||
case 2:
|
||||
return OPC_ENUM_PUBLIC_CONNECTIONS;
|
||||
case 3:
|
||||
return OPC_ENUM_ALL_CONNECTIONS;
|
||||
case 4:
|
||||
return OPC_ENUM_PRIVATE;
|
||||
case 5:
|
||||
return OPC_ENUM_PUBLIC;
|
||||
case 6:
|
||||
return OPC_ENUM_ALL;
|
||||
default:
|
||||
return OPC_ENUM_UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public class OPCGroupState
|
||||
{
|
||||
private int _updateRate = 1000;
|
||||
|
||||
private boolean _active = true;
|
||||
|
||||
private String _name = "";
|
||||
|
||||
private int _timeBias = 0;
|
||||
|
||||
private float _percentDeadband = 0.0f;
|
||||
|
||||
private int _localeID = 0;
|
||||
|
||||
private int _clientHandle = 0;
|
||||
|
||||
private int _serverHandle = 0;
|
||||
|
||||
public boolean isActive ()
|
||||
{
|
||||
return this._active;
|
||||
}
|
||||
|
||||
public void setActive ( final boolean active )
|
||||
{
|
||||
this._active = active;
|
||||
}
|
||||
|
||||
public int getClientHandle ()
|
||||
{
|
||||
return this._clientHandle;
|
||||
}
|
||||
|
||||
public void setClientHandle ( final int clientHandle )
|
||||
{
|
||||
this._clientHandle = clientHandle;
|
||||
}
|
||||
|
||||
public int getLocaleID ()
|
||||
{
|
||||
return this._localeID;
|
||||
}
|
||||
|
||||
public void setLocaleID ( final int localeID )
|
||||
{
|
||||
this._localeID = localeID;
|
||||
}
|
||||
|
||||
public String getName ()
|
||||
{
|
||||
return this._name;
|
||||
}
|
||||
|
||||
public void setName ( final String name )
|
||||
{
|
||||
this._name = name;
|
||||
}
|
||||
|
||||
public float getPercentDeadband ()
|
||||
{
|
||||
return this._percentDeadband;
|
||||
}
|
||||
|
||||
public void setPercentDeadband ( final float percentDeadband )
|
||||
{
|
||||
this._percentDeadband = percentDeadband;
|
||||
}
|
||||
|
||||
public int getServerHandle ()
|
||||
{
|
||||
return this._serverHandle;
|
||||
}
|
||||
|
||||
public void setServerHandle ( final int serverHandle )
|
||||
{
|
||||
this._serverHandle = serverHandle;
|
||||
}
|
||||
|
||||
public int getTimeBias ()
|
||||
{
|
||||
return this._timeBias;
|
||||
}
|
||||
|
||||
public void setTimeBias ( final int timeBias )
|
||||
{
|
||||
this._timeBias = timeBias;
|
||||
}
|
||||
|
||||
public int getUpdateRate ()
|
||||
{
|
||||
return this._updateRate;
|
||||
}
|
||||
|
||||
public void setUpdateRate ( final int updateRate )
|
||||
{
|
||||
this._updateRate = updateRate;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2012 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
|
||||
public class OPCITEMDEF
|
||||
{
|
||||
private String accessPath = "";
|
||||
|
||||
private String itemID = "";
|
||||
|
||||
private boolean active = true;
|
||||
|
||||
private int clientHandle;
|
||||
|
||||
private short requestedDataType = JIVariant.VT_EMPTY;
|
||||
|
||||
private short reserved;
|
||||
|
||||
public String getAccessPath ()
|
||||
{
|
||||
return this.accessPath;
|
||||
}
|
||||
|
||||
public void setAccessPath ( final String accessPath )
|
||||
{
|
||||
this.accessPath = accessPath;
|
||||
}
|
||||
|
||||
public int getClientHandle ()
|
||||
{
|
||||
return this.clientHandle;
|
||||
}
|
||||
|
||||
public void setClientHandle ( final int clientHandle )
|
||||
{
|
||||
this.clientHandle = clientHandle;
|
||||
}
|
||||
|
||||
public boolean isActive ()
|
||||
{
|
||||
return this.active;
|
||||
}
|
||||
|
||||
public void setActive ( final boolean active )
|
||||
{
|
||||
this.active = active;
|
||||
}
|
||||
|
||||
public String getItemID ()
|
||||
{
|
||||
return this.itemID;
|
||||
}
|
||||
|
||||
public void setItemID ( final String itemID )
|
||||
{
|
||||
this.itemID = itemID;
|
||||
}
|
||||
|
||||
public short getRequestedDataType ()
|
||||
{
|
||||
return this.requestedDataType;
|
||||
}
|
||||
|
||||
public void setRequestedDataType ( final short requestedDataType )
|
||||
{
|
||||
this.requestedDataType = requestedDataType;
|
||||
}
|
||||
|
||||
public short getReserved ()
|
||||
{
|
||||
return this.reserved;
|
||||
}
|
||||
|
||||
public void setReserved ( final short reserved )
|
||||
{
|
||||
this.reserved = reserved;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert to structure to a J-Interop structure
|
||||
*
|
||||
* @return the j-interop structe
|
||||
* @throws JIException
|
||||
*/
|
||||
public JIStruct toStruct () throws JIException
|
||||
{
|
||||
final JIStruct struct = new JIStruct ();
|
||||
struct.addMember ( new JIString ( getAccessPath (), JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) );
|
||||
struct.addMember ( new JIString ( getItemID (), JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) );
|
||||
struct.addMember ( new Integer ( isActive () ? 1 : 0 ) );
|
||||
struct.addMember ( Integer.valueOf ( getClientHandle () ) );
|
||||
|
||||
struct.addMember ( Integer.valueOf ( 0 ) ); // blob size
|
||||
struct.addMember ( new JIPointer ( null ) ); // blob
|
||||
|
||||
struct.addMember ( Short.valueOf ( getRequestedDataType () ) );
|
||||
struct.addMember ( Short.valueOf ( getReserved () ) );
|
||||
return struct;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
|
||||
public class OPCITEMRESULT
|
||||
{
|
||||
private int _serverHandle = 0;
|
||||
|
||||
private short _canonicalDataType = JIVariant.VT_EMPTY;
|
||||
|
||||
private short _reserved = 0;
|
||||
|
||||
private int _accessRights = 0;
|
||||
|
||||
public int getAccessRights ()
|
||||
{
|
||||
return this._accessRights;
|
||||
}
|
||||
|
||||
public void setAccessRights ( final int accessRights )
|
||||
{
|
||||
this._accessRights = accessRights;
|
||||
}
|
||||
|
||||
public short getCanonicalDataType ()
|
||||
{
|
||||
return this._canonicalDataType;
|
||||
}
|
||||
|
||||
public void setCanonicalDataType ( final short canonicalDataType )
|
||||
{
|
||||
this._canonicalDataType = canonicalDataType;
|
||||
}
|
||||
|
||||
public short getReserved ()
|
||||
{
|
||||
return this._reserved;
|
||||
}
|
||||
|
||||
public void setReserved ( final short reserved )
|
||||
{
|
||||
this._reserved = reserved;
|
||||
}
|
||||
|
||||
public int getServerHandle ()
|
||||
{
|
||||
return this._serverHandle;
|
||||
}
|
||||
|
||||
public void setServerHandle ( final int serverHandle )
|
||||
{
|
||||
this._serverHandle = serverHandle;
|
||||
}
|
||||
|
||||
public static JIStruct getStruct () throws JIException
|
||||
{
|
||||
JIStruct struct = new JIStruct ();
|
||||
|
||||
struct.addMember ( Integer.class ); // Server handle
|
||||
struct.addMember ( Short.class ); // data type
|
||||
struct.addMember ( Short.class ); // reserved
|
||||
struct.addMember ( Integer.class ); // access rights
|
||||
struct.addMember ( Integer.class ); // blob size
|
||||
// grab the normally unused byte array
|
||||
struct.addMember ( new JIPointer ( new JIArray ( Byte.class, null, 1, true, false ) ) );
|
||||
|
||||
return struct;
|
||||
}
|
||||
|
||||
public static OPCITEMRESULT fromStruct ( final JIStruct struct )
|
||||
{
|
||||
OPCITEMRESULT result = new OPCITEMRESULT ();
|
||||
|
||||
result.setServerHandle ( new Integer ( (Integer)struct.getMember ( 0 ) ) );
|
||||
result.setCanonicalDataType ( new Short ( (Short)struct.getMember ( 1 ) ) );
|
||||
result.setReserved ( new Short ( (Short)struct.getMember ( 2 ) ) );
|
||||
result.setAccessRights ( new Integer ( (Integer)struct.getMember ( 3 ) ) );
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
import org.openscada.opc.dcom.common.FILETIME;
|
||||
|
||||
public class OPCITEMSTATE
|
||||
{
|
||||
private int _clientHandle = 0;
|
||||
|
||||
private FILETIME _timestamp = null;
|
||||
|
||||
private short _quality = 0;
|
||||
|
||||
private short _reserved = 0;
|
||||
|
||||
private JIVariant _value = null;
|
||||
|
||||
public int getClientHandle ()
|
||||
{
|
||||
return this._clientHandle;
|
||||
}
|
||||
|
||||
public void setClientHandle ( final int clientHandle )
|
||||
{
|
||||
this._clientHandle = clientHandle;
|
||||
}
|
||||
|
||||
public short getQuality ()
|
||||
{
|
||||
return this._quality;
|
||||
}
|
||||
|
||||
public void setQuality ( final short quality )
|
||||
{
|
||||
this._quality = quality;
|
||||
}
|
||||
|
||||
public short getReserved ()
|
||||
{
|
||||
return this._reserved;
|
||||
}
|
||||
|
||||
public void setReserved ( final short reserved )
|
||||
{
|
||||
this._reserved = reserved;
|
||||
}
|
||||
|
||||
public FILETIME getTimestamp ()
|
||||
{
|
||||
return this._timestamp;
|
||||
}
|
||||
|
||||
public void setTimestamp ( final FILETIME timestamp )
|
||||
{
|
||||
this._timestamp = timestamp;
|
||||
}
|
||||
|
||||
public JIVariant getValue ()
|
||||
{
|
||||
return this._value;
|
||||
}
|
||||
|
||||
public void setValue ( final JIVariant value )
|
||||
{
|
||||
this._value = value;
|
||||
}
|
||||
|
||||
public static JIStruct getStruct () throws JIException
|
||||
{
|
||||
JIStruct struct = new JIStruct ();
|
||||
|
||||
struct.addMember ( Integer.class );
|
||||
struct.addMember ( FILETIME.getStruct () );
|
||||
struct.addMember ( Short.class );
|
||||
struct.addMember ( Short.class );
|
||||
struct.addMember ( JIVariant.class );
|
||||
|
||||
return struct;
|
||||
}
|
||||
|
||||
public static OPCITEMSTATE fromStruct ( final JIStruct struct )
|
||||
{
|
||||
OPCITEMSTATE itemState = new OPCITEMSTATE ();
|
||||
|
||||
itemState.setClientHandle ( (Integer)struct.getMember ( 0 ) );
|
||||
itemState.setTimestamp ( FILETIME.fromStruct ( (JIStruct)struct.getMember ( 1 ) ) );
|
||||
itemState.setQuality ( (Short)struct.getMember ( 2 ) );
|
||||
itemState.setReserved ( (Short)struct.getMember ( 3 ) );
|
||||
itemState.setValue ( (JIVariant)struct.getMember ( 4 ) );
|
||||
|
||||
return itemState;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public enum OPCNAMESPACETYPE
|
||||
{
|
||||
OPC_NS_HIERARCHIAL ( 1 ),
|
||||
OPC_NS_FLAT ( 2 ),
|
||||
OPC_NS_UNKNOWN ( 0 );
|
||||
|
||||
private int _id;
|
||||
|
||||
private OPCNAMESPACETYPE ( final int id )
|
||||
{
|
||||
this._id = id;
|
||||
}
|
||||
|
||||
public int id ()
|
||||
{
|
||||
return this._id;
|
||||
}
|
||||
|
||||
public static OPCNAMESPACETYPE fromID ( final int id )
|
||||
{
|
||||
switch ( id )
|
||||
{
|
||||
case 1:
|
||||
return OPC_NS_HIERARCHIAL;
|
||||
case 2:
|
||||
return OPC_NS_FLAT;
|
||||
default:
|
||||
return OPC_NS_UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public enum OPCSERVERSTATE
|
||||
{
|
||||
OPC_STATUS_RUNNING ( 1 ),
|
||||
OPC_STATUS_FAILED ( 2 ),
|
||||
OPC_STATUS_NOCONFIG ( 3 ),
|
||||
OPC_STATUS_SUSPENDED ( 4 ),
|
||||
OPC_STATUS_TEST ( 5 ),
|
||||
OPC_STATUS_COMM_FAULT ( 6 ),
|
||||
OPC_STATUS_UNKNOWN ( 0 );
|
||||
|
||||
private int _id;
|
||||
|
||||
private OPCSERVERSTATE ( final int id )
|
||||
{
|
||||
this._id = id;
|
||||
}
|
||||
|
||||
public int id ()
|
||||
{
|
||||
return this._id;
|
||||
}
|
||||
|
||||
public static OPCSERVERSTATE fromID ( final int id )
|
||||
{
|
||||
switch ( id )
|
||||
{
|
||||
case 1:
|
||||
return OPC_STATUS_RUNNING;
|
||||
case 2:
|
||||
return OPC_STATUS_FAILED;
|
||||
case 3:
|
||||
return OPC_STATUS_NOCONFIG;
|
||||
case 4:
|
||||
return OPC_STATUS_SUSPENDED;
|
||||
case 5:
|
||||
return OPC_STATUS_TEST;
|
||||
case 6:
|
||||
return OPC_STATUS_COMM_FAULT;
|
||||
default:
|
||||
return OPC_STATUS_UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.openscada.opc.dcom.common.FILETIME;
|
||||
|
||||
public class OPCSERVERSTATUS
|
||||
{
|
||||
private FILETIME _startTime = null;
|
||||
|
||||
private FILETIME _currentTime = null;
|
||||
|
||||
private FILETIME _lastUpdateTime = null;
|
||||
|
||||
private OPCSERVERSTATE _serverState = null;
|
||||
|
||||
private int _groupCount = -1;
|
||||
|
||||
private int _bandWidth = -1;
|
||||
|
||||
private short _majorVersion = -1;
|
||||
|
||||
private short _minorVersion = -1;
|
||||
|
||||
private short _buildNumber = -1;
|
||||
|
||||
private short _reserved = 0;
|
||||
|
||||
private String _vendorInfo = null;
|
||||
|
||||
public int getBandWidth ()
|
||||
{
|
||||
return this._bandWidth;
|
||||
}
|
||||
|
||||
public void setBandWidth ( final int bandWidth )
|
||||
{
|
||||
this._bandWidth = bandWidth;
|
||||
}
|
||||
|
||||
public short getBuildNumber ()
|
||||
{
|
||||
return this._buildNumber;
|
||||
}
|
||||
|
||||
public void setBuildNumber ( final short buildNumber )
|
||||
{
|
||||
this._buildNumber = buildNumber;
|
||||
}
|
||||
|
||||
public FILETIME getCurrentTime ()
|
||||
{
|
||||
return this._currentTime;
|
||||
}
|
||||
|
||||
public void setCurrentTime ( final FILETIME currentTime )
|
||||
{
|
||||
this._currentTime = currentTime;
|
||||
}
|
||||
|
||||
public int getGroupCount ()
|
||||
{
|
||||
return this._groupCount;
|
||||
}
|
||||
|
||||
public void setGroupCount ( final int groupCount )
|
||||
{
|
||||
this._groupCount = groupCount;
|
||||
}
|
||||
|
||||
public FILETIME getLastUpdateTime ()
|
||||
{
|
||||
return this._lastUpdateTime;
|
||||
}
|
||||
|
||||
public void setLastUpdateTime ( final FILETIME lastUpdateTime )
|
||||
{
|
||||
this._lastUpdateTime = lastUpdateTime;
|
||||
}
|
||||
|
||||
public short getMajorVersion ()
|
||||
{
|
||||
return this._majorVersion;
|
||||
}
|
||||
|
||||
public void setMajorVersion ( final short majorVersion )
|
||||
{
|
||||
this._majorVersion = majorVersion;
|
||||
}
|
||||
|
||||
public short getMinorVersion ()
|
||||
{
|
||||
return this._minorVersion;
|
||||
}
|
||||
|
||||
public void setMinorVersion ( final short minorVersion )
|
||||
{
|
||||
this._minorVersion = minorVersion;
|
||||
}
|
||||
|
||||
public short getReserved ()
|
||||
{
|
||||
return this._reserved;
|
||||
}
|
||||
|
||||
public void setReserved ( final short reserved )
|
||||
{
|
||||
this._reserved = reserved;
|
||||
}
|
||||
|
||||
public FILETIME getStartTime ()
|
||||
{
|
||||
return this._startTime;
|
||||
}
|
||||
|
||||
public void setStartTime ( final FILETIME startTime )
|
||||
{
|
||||
this._startTime = startTime;
|
||||
}
|
||||
|
||||
public String getVendorInfo ()
|
||||
{
|
||||
return this._vendorInfo;
|
||||
}
|
||||
|
||||
public void setVendorInfo ( final String vendorInfo )
|
||||
{
|
||||
this._vendorInfo = vendorInfo;
|
||||
}
|
||||
|
||||
public OPCSERVERSTATE getServerState ()
|
||||
{
|
||||
return this._serverState;
|
||||
}
|
||||
|
||||
public void setServerState ( final OPCSERVERSTATE dwServerState )
|
||||
{
|
||||
this._serverState = dwServerState;
|
||||
}
|
||||
|
||||
public static JIStruct getStruct () throws JIException
|
||||
{
|
||||
JIStruct struct = new JIStruct ();
|
||||
|
||||
struct.addMember ( FILETIME.getStruct () );
|
||||
struct.addMember ( FILETIME.getStruct () );
|
||||
struct.addMember ( FILETIME.getStruct () );
|
||||
struct.addMember ( Short.class ); // enum: OPCSERVERSTATE
|
||||
struct.addMember ( Integer.class );
|
||||
struct.addMember ( Integer.class );
|
||||
struct.addMember ( Short.class );
|
||||
struct.addMember ( Short.class );
|
||||
struct.addMember ( Short.class );
|
||||
struct.addMember ( Short.class );
|
||||
struct.addMember ( new JIPointer ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ) );
|
||||
|
||||
return struct;
|
||||
}
|
||||
|
||||
public static OPCSERVERSTATUS fromStruct ( final JIStruct struct )
|
||||
{
|
||||
OPCSERVERSTATUS status = new OPCSERVERSTATUS ();
|
||||
|
||||
status._startTime = FILETIME.fromStruct ( (JIStruct)struct.getMember ( 0 ) );
|
||||
status._currentTime = FILETIME.fromStruct ( (JIStruct)struct.getMember ( 1 ) );
|
||||
status._lastUpdateTime = FILETIME.fromStruct ( (JIStruct)struct.getMember ( 2 ) );
|
||||
|
||||
status._serverState = OPCSERVERSTATE.fromID ( (Short)struct.getMember ( 3 ) );
|
||||
status._groupCount = (Integer)struct.getMember ( 4 );
|
||||
status._bandWidth = (Integer)struct.getMember ( 5 );
|
||||
status._majorVersion = (Short)struct.getMember ( 6 );
|
||||
status._minorVersion = (Short)struct.getMember ( 7 );
|
||||
status._buildNumber = (Short)struct.getMember ( 8 );
|
||||
status._reserved = (Short)struct.getMember ( 9 );
|
||||
status._vendorInfo = ( (JIString) ( (JIPointer)struct.getMember ( 10 ) ).getReferent () ).getString ();
|
||||
|
||||
return status;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
public class PropertyDescription
|
||||
{
|
||||
private int _id = -1;
|
||||
|
||||
private String _description = "";
|
||||
|
||||
private short _varType = 0;
|
||||
|
||||
public String getDescription ()
|
||||
{
|
||||
return this._description;
|
||||
}
|
||||
|
||||
public void setDescription ( final String description )
|
||||
{
|
||||
this._description = description;
|
||||
}
|
||||
|
||||
public int getId ()
|
||||
{
|
||||
return this._id;
|
||||
}
|
||||
|
||||
public void setId ( final int id )
|
||||
{
|
||||
this._id = id;
|
||||
}
|
||||
|
||||
public short getVarType ()
|
||||
{
|
||||
return this._varType;
|
||||
}
|
||||
|
||||
public void setVarType ( final short varType )
|
||||
{
|
||||
this._varType = varType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
*
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
* Copyright (C) 2013 Jens Reimann (ctron@dentrassi.de)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
|
||||
public class ValueData
|
||||
{
|
||||
private JIVariant value;
|
||||
|
||||
private short quality;
|
||||
|
||||
private Calendar timestamp;
|
||||
|
||||
public short getQuality ()
|
||||
{
|
||||
return this.quality;
|
||||
}
|
||||
|
||||
public void setQuality ( final short quality )
|
||||
{
|
||||
this.quality = quality;
|
||||
}
|
||||
|
||||
public Calendar getTimestamp ()
|
||||
{
|
||||
return this.timestamp;
|
||||
}
|
||||
|
||||
public void setTimestamp ( final Calendar timestamp )
|
||||
{
|
||||
this.timestamp = timestamp;
|
||||
}
|
||||
|
||||
public JIVariant getValue ()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public void setValue ( final JIVariant value )
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
*
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
* Copyright (C) 2013 Jens Reimann (ctron@dentrassi.de)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da;
|
||||
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
|
||||
/**
|
||||
* Data for a write request to the server
|
||||
*
|
||||
* @author Jens Reimann <jens.reimann@th4-systems.com>
|
||||
*/
|
||||
public class WriteRequest
|
||||
{
|
||||
private int serverHandle = 0;
|
||||
|
||||
private JIVariant value = JIVariant.EMPTY ();
|
||||
|
||||
public WriteRequest ()
|
||||
{
|
||||
}
|
||||
|
||||
public WriteRequest ( final WriteRequest request )
|
||||
{
|
||||
this.serverHandle = request.serverHandle;
|
||||
this.value = request.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new write request with pre-fille data
|
||||
*
|
||||
* @param serverHandle
|
||||
* the server handle of the item to write to
|
||||
* @param value
|
||||
* the value to write.
|
||||
*/
|
||||
public WriteRequest ( final int serverHandle, final JIVariant value )
|
||||
{
|
||||
this.serverHandle = serverHandle;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getServerHandle ()
|
||||
{
|
||||
return this.serverHandle;
|
||||
}
|
||||
|
||||
public void setServerHandle ( final int serverHandle )
|
||||
{
|
||||
this.serverHandle = serverHandle;
|
||||
}
|
||||
|
||||
public JIVariant getValue ()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public void setValue ( final JIVariant value )
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
*
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
* Copyright (C) 2013 Jens Reimann (ctron@dentrassi.de)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.openscada.opc.dcom.common.Result;
|
||||
import org.openscada.opc.dcom.common.ResultSet;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.OPCDATASOURCE;
|
||||
|
||||
public class OPCAsyncIO2 extends BaseCOMObject
|
||||
{
|
||||
public class AsyncResult
|
||||
{
|
||||
private final ResultSet<Integer> result;
|
||||
|
||||
private final Integer cancelId;
|
||||
|
||||
public AsyncResult ()
|
||||
{
|
||||
super ();
|
||||
this.result = new ResultSet<Integer> ();
|
||||
this.cancelId = null;
|
||||
}
|
||||
|
||||
public AsyncResult ( final ResultSet<Integer> result, final Integer cancelId )
|
||||
{
|
||||
super ();
|
||||
this.result = result;
|
||||
this.cancelId = cancelId;
|
||||
}
|
||||
|
||||
public Integer getCancelId ()
|
||||
{
|
||||
return this.cancelId;
|
||||
}
|
||||
|
||||
public ResultSet<Integer> getResult ()
|
||||
{
|
||||
return this.result;
|
||||
}
|
||||
}
|
||||
|
||||
public OPCAsyncIO2 ( final IJIComObject opcAsyncIO2 ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcAsyncIO2.queryInterface ( Constants.IOPCAsyncIO2_IID ) );
|
||||
}
|
||||
|
||||
public void setEnable ( final boolean state ) throws JIException
|
||||
{
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 4 );
|
||||
|
||||
callObject.addInParamAsInt ( state ? 1 : 0, JIFlags.FLAG_NULL );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public int refresh ( final OPCDATASOURCE dataSource, final int transactionID ) throws JIException
|
||||
{
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addInParamAsShort ( (short)dataSource.id (), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( transactionID, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
|
||||
final Object result[] = getCOMObject ().call ( callObject );
|
||||
|
||||
return (Integer)result[0];
|
||||
}
|
||||
|
||||
public void cancel ( final int cancelId ) throws JIException
|
||||
{
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addInParamAsInt ( cancelId, JIFlags.FLAG_NULL );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public AsyncResult read ( final int transactionId, final Integer... serverHandles ) throws JIException
|
||||
{
|
||||
if ( serverHandles == null || serverHandles.length == 0 )
|
||||
{
|
||||
return new AsyncResult ();
|
||||
}
|
||||
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addInParamAsInt ( serverHandles.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( serverHandles, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( transactionId, JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
final Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
final Integer cancelId = (Integer)result[0];
|
||||
final Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[1] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
final ResultSet<Integer> resultSet = new ResultSet<Integer> ();
|
||||
|
||||
for ( int i = 0; i < serverHandles.length; i++ )
|
||||
{
|
||||
resultSet.add ( new Result<Integer> ( serverHandles[i], errorCodes[i] ) );
|
||||
}
|
||||
|
||||
return new AsyncResult ( resultSet, cancelId );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
|
||||
public class OPCBrowse extends BaseCOMObject
|
||||
{
|
||||
public OPCBrowse ( final IJIComObject opcServer ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcServer.queryInterface ( Constants.IOPCBrowse_IID ) );
|
||||
}
|
||||
}
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.common.impl.EnumString;
|
||||
import org.openscada.opc.dcom.common.impl.Helper;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.OPCBROWSEDIRECTION;
|
||||
import org.openscada.opc.dcom.da.OPCBROWSETYPE;
|
||||
import org.openscada.opc.dcom.da.OPCNAMESPACETYPE;
|
||||
|
||||
/**
|
||||
* Implementation for <code>IOPCBrowseServerAddressSpace</code>
|
||||
* @author Jens Reimann <jens.reimann@th4-systems.com>
|
||||
*
|
||||
*/
|
||||
public class OPCBrowseServerAddressSpace extends BaseCOMObject
|
||||
{
|
||||
public OPCBrowseServerAddressSpace ( final IJIComObject opcServer ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcServer.queryInterface ( Constants.IOPCBrowseServerAddressSpace_IID ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the information how the namespace is organized
|
||||
* @return the organization of the namespace
|
||||
* @throws JIException
|
||||
*/
|
||||
public OPCNAMESPACETYPE queryOrganization () throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addOutParamAsType ( Short.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object result[] = getCOMObject ().call ( callObject );
|
||||
|
||||
return OPCNAMESPACETYPE.fromID ( (Short)result[0] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Direct the browser to another position
|
||||
*
|
||||
* Depending on the <em>direction</em> the new position will be set based on the provided
|
||||
* position information. If the direction is {@link OPCBROWSEDIRECTION#OPC_BROWSE_TO} then
|
||||
* the <em>position</em> is the item to go to. If the direction is {@link OPCBROWSEDIRECTION#OPC_BROWSE_DOWN}
|
||||
* the browser will descent into the tree down (not to) the branch item in <em>position</em>.
|
||||
* Passing {@link OPCBROWSEDIRECTION#OPC_BROWSE_UP} won't need a <em>position</em> (pass <code>null</code>)
|
||||
* and will ascent in the tree one level.
|
||||
*
|
||||
* Passing {@link OPCBROWSEDIRECTION#OPC_BROWSE_TO} and <code>null</code> as position will
|
||||
* go to the first root entry of the namespace.
|
||||
*
|
||||
* @param position The item position reference for the direction
|
||||
* @param direction The direction to go based on the position
|
||||
* @throws JIException
|
||||
*/
|
||||
public void changePosition ( final String position, final OPCBROWSEDIRECTION direction ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addInParamAsShort ( (short)direction.id (), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsString ( position, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
|
||||
}
|
||||
|
||||
public EnumString browse ( final OPCBROWSETYPE browseType, final String filterCriteria, final int accessRights, final int dataType ) throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addInParamAsShort ( (short)browseType.id (), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsString ( filterCriteria, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addInParamAsShort ( (short)dataType, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( accessRights, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
return new EnumString ( (IJIComObject)result[0] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the possible access paths for an item
|
||||
* @param itemID the item to query
|
||||
* @return A string enumerator for the possible access paths
|
||||
* @throws JIException
|
||||
* @throws IllegalArgumentException
|
||||
* @throws UnknownHostException
|
||||
*/
|
||||
public EnumString browseAccessPaths ( final String itemID ) throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 4 );
|
||||
|
||||
callObject.addInParamAsString ( itemID, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
return new EnumString ( (IJIComObject)result[0] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the complete item id from an item at the local position.
|
||||
*
|
||||
* Browsing a hierarchical namespace the browse method will return items based on the
|
||||
* local level in the namespace. So actually only the last part of the item ID hierarchy
|
||||
* is returned. In order to convert this to the full item ID one can use this method. It
|
||||
* will only work if the browser is still at the position in question.
|
||||
*
|
||||
* @param item the local item
|
||||
* @return the complete item ID
|
||||
* @throws JIException
|
||||
*/
|
||||
public String getItemID ( final String item ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addInParamAsString ( item, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
return ( (JIString) ( (JIPointer)result[0] ).getReferent () ).getString ();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,259 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
*
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
* Copyright (C) 2013 Jens Reimann (ctron@dentrassi.de)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JILocalCoClass;
|
||||
import org.jinterop.dcom.core.JILocalInterfaceDefinition;
|
||||
import org.jinterop.dcom.core.JILocalMethodDescriptor;
|
||||
import org.jinterop.dcom.core.JILocalParamsDescriptor;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
import org.openscada.opc.dcom.common.FILETIME;
|
||||
import org.openscada.opc.dcom.common.KeyedResult;
|
||||
import org.openscada.opc.dcom.common.KeyedResultSet;
|
||||
import org.openscada.opc.dcom.common.Result;
|
||||
import org.openscada.opc.dcom.common.ResultSet;
|
||||
import org.openscada.opc.dcom.common.impl.EventHandlerImpl;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.IOPCDataCallback;
|
||||
import org.openscada.opc.dcom.da.ValueData;
|
||||
|
||||
public class OPCDataCallback extends EventHandlerImpl
|
||||
{
|
||||
private IOPCDataCallback callback = null;
|
||||
|
||||
private JILocalCoClass coClass = null;
|
||||
|
||||
public OPCDataCallback ()
|
||||
{
|
||||
super ();
|
||||
}
|
||||
|
||||
public Object[] OnDataChange ( final int transactionId, final int serverGroupHandle, final int masterQuality, final int masterErrorCode, final int count, final JIArray clientHandles, final JIArray values, final JIArray qualities, final JIArray timestamps, final JIArray errors )
|
||||
{
|
||||
final IOPCDataCallback callback = this.callback;
|
||||
if ( callback == null )
|
||||
{
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
// get arrays for more readable code later ;-)
|
||||
final Integer[] errorCodes = (Integer[])errors.getArrayInstance ();
|
||||
final Integer[] itemHandles = (Integer[])clientHandles.getArrayInstance ();
|
||||
final Short[] qualitiesArray = (Short[])qualities.getArrayInstance ();
|
||||
final JIVariant[] valuesArray = (JIVariant[])values.getArrayInstance ();
|
||||
final JIStruct[] timestampArray = (JIStruct[])timestamps.getArrayInstance ();
|
||||
|
||||
// create result data
|
||||
final KeyedResultSet<Integer, ValueData> result = new KeyedResultSet<Integer, ValueData> ();
|
||||
for ( int i = 0; i < count; i++ )
|
||||
{
|
||||
final ValueData vd = new ValueData ();
|
||||
vd.setQuality ( qualitiesArray[i] );
|
||||
vd.setTimestamp ( FILETIME.fromStruct ( timestampArray[i] ).asCalendar () );
|
||||
vd.setValue ( valuesArray[i] );
|
||||
result.add ( new KeyedResult<Integer, ValueData> ( itemHandles[i], vd, errorCodes[i] ) );
|
||||
}
|
||||
|
||||
// fire event
|
||||
try
|
||||
{
|
||||
callback.dataChange ( transactionId, serverGroupHandle, masterQuality, masterErrorCode, result );
|
||||
}
|
||||
catch ( final Throwable e )
|
||||
{
|
||||
e.printStackTrace ();
|
||||
}
|
||||
|
||||
// The client must always return S_OK
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
public synchronized Object[] OnReadComplete ( final int transactionId, final int serverGroupHandle, final int masterQuality, final int masterErrorCode, final int count, final JIArray clientHandles, final JIArray values, final JIArray qualities, final JIArray timestamps, final JIArray errors )
|
||||
{
|
||||
if ( this.callback == null )
|
||||
{
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
// get arrays for more readable code later ;-)
|
||||
final Integer[] errorCodes = (Integer[])errors.getArrayInstance ();
|
||||
final Integer[] itemHandles = (Integer[])clientHandles.getArrayInstance ();
|
||||
final Short[] qualitiesArray = (Short[])qualities.getArrayInstance ();
|
||||
final JIVariant[] valuesArray = (JIVariant[])values.getArrayInstance ();
|
||||
final JIStruct[] timestampArray = (JIStruct[])timestamps.getArrayInstance ();
|
||||
|
||||
// create result data
|
||||
final KeyedResultSet<Integer, ValueData> result = new KeyedResultSet<Integer, ValueData> ();
|
||||
for ( int i = 0; i < count; i++ )
|
||||
{
|
||||
final ValueData vd = new ValueData ();
|
||||
vd.setQuality ( qualitiesArray[i] );
|
||||
vd.setTimestamp ( FILETIME.fromStruct ( timestampArray[i] ).asCalendar () );
|
||||
vd.setValue ( valuesArray[i] );
|
||||
result.add ( new KeyedResult<Integer, ValueData> ( itemHandles[i], vd, errorCodes[i] ) );
|
||||
}
|
||||
|
||||
// fire event
|
||||
try
|
||||
{
|
||||
this.callback.readComplete ( transactionId, serverGroupHandle, masterQuality, masterErrorCode, result );
|
||||
}
|
||||
catch ( final Throwable e )
|
||||
{
|
||||
e.printStackTrace ();
|
||||
}
|
||||
|
||||
// The client must always return S_OK
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
public synchronized Object[] OnWriteComplete ( final int transactionId, final int serverGroupHandle, final int masterErrorCode, final int count, final JIArray clientHandles, final JIArray errors )
|
||||
{
|
||||
if ( this.callback == null )
|
||||
{
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
// get arrays for more readable code later ;-)
|
||||
final Integer[] errorCodes = (Integer[])errors.getArrayInstance ();
|
||||
final Integer[] itemHandles = (Integer[])clientHandles.getArrayInstance ();
|
||||
|
||||
// create result data
|
||||
final ResultSet<Integer> result = new ResultSet<Integer> ();
|
||||
for ( int i = 0; i < count; i++ )
|
||||
{
|
||||
result.add ( new Result<Integer> ( itemHandles[i], errorCodes[i] ) );
|
||||
}
|
||||
|
||||
// fire event
|
||||
try
|
||||
{
|
||||
this.callback.writeComplete ( transactionId, serverGroupHandle, masterErrorCode, result );
|
||||
}
|
||||
catch ( final Throwable e )
|
||||
{
|
||||
e.printStackTrace ();
|
||||
}
|
||||
|
||||
// The client must always return S_OK
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
public synchronized Object[] OnCancelComplete ( final int transactionId, final int serverGroupHandle )
|
||||
{
|
||||
if ( this.callback == null )
|
||||
{
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
this.callback.cancelComplete ( transactionId, serverGroupHandle );
|
||||
|
||||
// The client must always return S_OK
|
||||
return new Object[] { org.openscada.opc.dcom.common.Constants.S_OK };
|
||||
}
|
||||
|
||||
public synchronized JILocalCoClass getCoClass () throws JIException
|
||||
{
|
||||
if ( this.coClass != null )
|
||||
{
|
||||
return this.coClass;
|
||||
}
|
||||
|
||||
this.coClass = new JILocalCoClass ( new JILocalInterfaceDefinition ( Constants.IOPCDataCallback_IID, false ), this, false );
|
||||
|
||||
JILocalParamsDescriptor params;
|
||||
JILocalMethodDescriptor method;
|
||||
|
||||
// OnDataChange
|
||||
params = new JILocalParamsDescriptor ();
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL ); // trans id
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL ); // group handle
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL ); // master quality
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL ); // master error
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL ); // count
|
||||
params.addInParamAsObject ( new JIArray ( Integer.class, null, 1, true ), JIFlags.FLAG_NULL ); // item handles
|
||||
params.addInParamAsObject ( new JIArray ( JIVariant.class, null, 1, true ), JIFlags.FLAG_NULL ); // values
|
||||
params.addInParamAsObject ( new JIArray ( Short.class, null, 1, true ), JIFlags.FLAG_NULL ); // qualities
|
||||
params.addInParamAsObject ( new JIArray ( FILETIME.getStruct (), null, 1, true ), JIFlags.FLAG_NULL ); // timestamps
|
||||
params.addInParamAsObject ( new JIArray ( Integer.class, null, 1, true ), JIFlags.FLAG_NULL ); // errors
|
||||
|
||||
method = new JILocalMethodDescriptor ( "OnDataChange", params );
|
||||
this.coClass.getInterfaceDefinition ().addMethodDescriptor ( method );
|
||||
|
||||
// OnReadComplete
|
||||
params = new JILocalParamsDescriptor ();
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsObject ( new JIArray ( Integer.class, null, 1, true ), JIFlags.FLAG_NULL );
|
||||
params.addInParamAsObject ( new JIArray ( JIVariant.class, null, 1, true ), JIFlags.FLAG_NULL );
|
||||
params.addInParamAsObject ( new JIArray ( Short.class, null, 1, true ), JIFlags.FLAG_NULL );
|
||||
params.addInParamAsObject ( new JIArray ( FILETIME.getStruct (), null, 1, true ), JIFlags.FLAG_NULL );
|
||||
params.addInParamAsObject ( new JIArray ( Integer.class, null, 1, true ), JIFlags.FLAG_NULL );
|
||||
method = new JILocalMethodDescriptor ( "OnReadComplete", params );
|
||||
this.coClass.getInterfaceDefinition ().addMethodDescriptor ( method );
|
||||
|
||||
// OnWriteComplete
|
||||
params = new JILocalParamsDescriptor ();
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsObject ( new JIArray ( Integer.class, null, 1, true ), JIFlags.FLAG_NULL );
|
||||
params.addInParamAsObject ( new JIArray ( Integer.class, null, 1, true ), JIFlags.FLAG_NULL );
|
||||
method = new JILocalMethodDescriptor ( "OnWriteComplete", params );
|
||||
this.coClass.getInterfaceDefinition ().addMethodDescriptor ( method );
|
||||
|
||||
// OnCancelComplete
|
||||
params = new JILocalParamsDescriptor ();
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
params.addInParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
method = new JILocalMethodDescriptor ( "OnCancelComplete", params );
|
||||
this.coClass.getInterfaceDefinition ().addMethodDescriptor ( method );
|
||||
|
||||
// Add supported event interfaces
|
||||
final List<String> eventInterfaces = new LinkedList<String> ();
|
||||
eventInterfaces.add ( Constants.IOPCDataCallback_IID );
|
||||
this.coClass.setSupportedEventInterfaces ( eventInterfaces );
|
||||
|
||||
return this.coClass;
|
||||
}
|
||||
|
||||
public void setCallback ( final IOPCDataCallback callback )
|
||||
{
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
public IOPCDataCallback getCallback ()
|
||||
{
|
||||
return this.callback;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIFrameworkHelper;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
import org.jinterop.dcom.impls.JIObjectFactory;
|
||||
import org.openscada.opc.dcom.common.EventHandler;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.IOPCDataCallback;
|
||||
import org.openscada.opc.dcom.da.OPCGroupState;
|
||||
|
||||
/**
|
||||
* Implementation of <code>IOPCGroupStateMgt</code>
|
||||
*
|
||||
* @author Jens Reimann <jens.reimann@th4-systems.com>
|
||||
*/
|
||||
public class OPCGroupStateMgt extends BaseCOMObject
|
||||
{
|
||||
public OPCGroupStateMgt ( final IJIComObject opcGroup ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcGroup.queryInterface ( Constants.IOPCGroupStateMgt_IID ) );
|
||||
}
|
||||
|
||||
public OPCGroupState getState () throws JIException
|
||||
{
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Boolean.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Float.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
|
||||
final Object result[] = getCOMObject ().call ( callObject );
|
||||
|
||||
final OPCGroupState state = new OPCGroupState ();
|
||||
state.setUpdateRate ( (Integer)result[0] );
|
||||
state.setActive ( (Boolean)result[1] );
|
||||
state.setName ( ( (JIString) ( (JIPointer)result[2] ).getReferent () ).getString () );
|
||||
state.setTimeBias ( (Integer)result[3] );
|
||||
state.setPercentDeadband ( (Float)result[4] );
|
||||
state.setLocaleID ( (Integer)result[5] );
|
||||
state.setClientHandle ( (Integer)result[6] );
|
||||
state.setServerHandle ( (Integer)result[7] );
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the group state Leaving any of the parameters <code>null</code> will keep the current value untouched.
|
||||
*
|
||||
* @param requestedUpdateRate
|
||||
* the requested update rate
|
||||
* @param active
|
||||
* Flag if the group is active or not
|
||||
* @param timeBias
|
||||
* The time bias
|
||||
* @param percentDeadband
|
||||
* the deadband percent
|
||||
* @param localeID
|
||||
* the locale ID
|
||||
* @param clientHandle
|
||||
* the client handle
|
||||
* @return the granted update rate
|
||||
* @throws JIException
|
||||
*/
|
||||
public int setState ( final Integer requestedUpdateRate, final Boolean active, final Integer timeBias, final Float percentDeadband, final Integer localeID, final Integer clientHandle ) throws JIException
|
||||
{
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addInParamAsPointer ( new JIPointer ( requestedUpdateRate ), JIFlags.FLAG_NULL );
|
||||
if ( active != null )
|
||||
{
|
||||
callObject.addInParamAsPointer ( new JIPointer ( Integer.valueOf ( active.booleanValue () ? 1 : 0 ) ), JIFlags.FLAG_NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
callObject.addInParamAsPointer ( new JIPointer ( null ), JIFlags.FLAG_NULL );
|
||||
}
|
||||
callObject.addInParamAsPointer ( new JIPointer ( timeBias ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsPointer ( new JIPointer ( percentDeadband ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsPointer ( new JIPointer ( localeID ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsPointer ( new JIPointer ( clientHandle ), JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
|
||||
final Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
return (Integer)result[0];
|
||||
}
|
||||
|
||||
public OPCItemMgt getItemManagement () throws JIException
|
||||
{
|
||||
return new OPCItemMgt ( getCOMObject () );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename to group
|
||||
*
|
||||
* @param name
|
||||
* the new name
|
||||
* @throws JIException
|
||||
*/
|
||||
public void setName ( final String name ) throws JIException
|
||||
{
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addInParamAsString ( name, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone the group
|
||||
*
|
||||
* @param name
|
||||
* the name of the cloned group
|
||||
* @return The cloned group
|
||||
* @throws JIException
|
||||
* @throws UnknownHostException
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
public OPCGroupStateMgt clone ( final String name ) throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addInParamAsString ( name, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addInParamAsUUID ( Constants.IOPCGroupStateMgt_IID, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
final Object[] result = getCOMObject ().call ( callObject );
|
||||
return new OPCGroupStateMgt ( (IJIComObject)result[0] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Attach a new callback to the group
|
||||
*
|
||||
* @param callback
|
||||
* The callback to attach
|
||||
* @return The event handler information
|
||||
* @throws JIException
|
||||
*/
|
||||
public EventHandler attach ( final IOPCDataCallback callback ) throws JIException
|
||||
{
|
||||
final OPCDataCallback callbackObject = new OPCDataCallback ();
|
||||
|
||||
callbackObject.setCallback ( callback );
|
||||
|
||||
// sync the callback object so that no calls get through the callback
|
||||
// until the callback information is set
|
||||
// If happens in some cases that the callback is triggered before
|
||||
// the method attachEventHandler returns.
|
||||
synchronized ( callbackObject )
|
||||
{
|
||||
final String id = JIFrameworkHelper.attachEventHandler ( getCOMObject (), Constants.IOPCDataCallback_IID, JIObjectFactory.buildObject ( getCOMObject ().getAssociatedSession (), callbackObject.getCoClass () ) );
|
||||
|
||||
callbackObject.setInfo ( getCOMObject (), id );
|
||||
}
|
||||
return callbackObject;
|
||||
}
|
||||
|
||||
public OPCAsyncIO2 getAsyncIO2 ()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new OPCAsyncIO2 ( getCOMObject () );
|
||||
}
|
||||
catch ( final Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public OPCSyncIO getSyncIO ()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new OPCSyncIO ( getCOMObject () );
|
||||
}
|
||||
catch ( final Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
import org.openscada.opc.dcom.common.FILETIME;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.IORequest;
|
||||
|
||||
public class OPCItemIO extends BaseCOMObject
|
||||
{
|
||||
public OPCItemIO ( final IJIComObject opcItemIO ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcItemIO.queryInterface ( Constants.IOPCItemIO_IID ) );
|
||||
}
|
||||
|
||||
public void read ( final IORequest[] requests ) throws JIException
|
||||
{
|
||||
if ( requests.length == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
JIString itemIDs[] = new JIString[requests.length];
|
||||
Integer maxAges[] = new Integer[requests.length];
|
||||
for ( int i = 0; i < requests.length; i++ )
|
||||
{
|
||||
itemIDs[i] = new JIString ( requests[i].getItemID (), JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
maxAges[i] = new Integer ( requests[i].getMaxAge () );
|
||||
}
|
||||
|
||||
callObject.addInParamAsInt ( requests.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( itemIDs, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( maxAges, true ), JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( JIVariant.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( FILETIME.getStruct (), null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2012 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.openscada.opc.dcom.common.KeyedResult;
|
||||
import org.openscada.opc.dcom.common.KeyedResultSet;
|
||||
import org.openscada.opc.dcom.common.Result;
|
||||
import org.openscada.opc.dcom.common.ResultSet;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.common.impl.Helper;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.OPCITEMDEF;
|
||||
import org.openscada.opc.dcom.da.OPCITEMRESULT;
|
||||
|
||||
public class OPCItemMgt extends BaseCOMObject
|
||||
{
|
||||
public OPCItemMgt ( final IJIComObject opcGroup ) throws JIException
|
||||
{
|
||||
super ( opcGroup.queryInterface ( Constants.IOPCItemMgt_IID ) );
|
||||
}
|
||||
|
||||
public KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> validate ( final OPCITEMDEF... items ) throws JIException
|
||||
{
|
||||
if ( items.length == 0 )
|
||||
{
|
||||
return new KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> ();
|
||||
}
|
||||
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
final JIStruct struct[] = new JIStruct[items.length];
|
||||
for ( int i = 0; i < items.length; i++ )
|
||||
{
|
||||
struct[i] = items[i].toStruct ();
|
||||
}
|
||||
final JIArray itemArray = new JIArray ( struct, true );
|
||||
|
||||
callObject.addInParamAsInt ( items.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( itemArray, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( 0, JIFlags.FLAG_NULL ); // don't update blobs
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( OPCITEMRESULT.getStruct (), null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
final Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
final JIStruct[] results = (JIStruct[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
final Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[1] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
final KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> resultList = new KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> ( items.length );
|
||||
for ( int i = 0; i < items.length; i++ )
|
||||
{
|
||||
final OPCITEMRESULT itemResult = OPCITEMRESULT.fromStruct ( results[i] );
|
||||
final KeyedResult<OPCITEMDEF, OPCITEMRESULT> resultEntry = new KeyedResult<OPCITEMDEF, OPCITEMRESULT> ( items[i], itemResult, errorCodes[i] );
|
||||
resultList.add ( resultEntry );
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
public KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> add ( final OPCITEMDEF... items ) throws JIException
|
||||
{
|
||||
if ( items.length == 0 )
|
||||
{
|
||||
return new KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> ();
|
||||
}
|
||||
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
final JIStruct struct[] = new JIStruct[items.length];
|
||||
for ( int i = 0; i < items.length; i++ )
|
||||
{
|
||||
struct[i] = items[i].toStruct ();
|
||||
}
|
||||
final JIArray itemArray = new JIArray ( struct, true );
|
||||
|
||||
callObject.addInParamAsInt ( items.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( itemArray, JIFlags.FLAG_NULL );
|
||||
|
||||
/*
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( OPCITEMRESULT.getStruct (), null, 1, true ) ),
|
||||
JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ),
|
||||
JIFlags.FLAG_NULL );
|
||||
*/
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( OPCITEMRESULT.getStruct (), null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
final Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
final JIStruct[] results = (JIStruct[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
final Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[1] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
final KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> resultList = new KeyedResultSet<OPCITEMDEF, OPCITEMRESULT> ( items.length );
|
||||
for ( int i = 0; i < items.length; i++ )
|
||||
{
|
||||
final OPCITEMRESULT itemResult = OPCITEMRESULT.fromStruct ( results[i] );
|
||||
final KeyedResult<OPCITEMDEF, OPCITEMRESULT> resultEntry = new KeyedResult<OPCITEMDEF, OPCITEMRESULT> ( items[i], itemResult, errorCodes[i] );
|
||||
resultList.add ( resultEntry );
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
public ResultSet<Integer> remove ( final Integer... serverHandles ) throws JIException
|
||||
{
|
||||
if ( serverHandles.length == 0 )
|
||||
{
|
||||
return new ResultSet<Integer> ();
|
||||
}
|
||||
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addInParamAsInt ( serverHandles.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( serverHandles, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
final Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
final Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
final ResultSet<Integer> results = new ResultSet<Integer> ( serverHandles.length );
|
||||
for ( int i = 0; i < serverHandles.length; i++ )
|
||||
{
|
||||
results.add ( new Result<Integer> ( serverHandles[i], errorCodes[i] ) );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
public ResultSet<Integer> setActiveState ( final boolean state, final Integer... items ) throws JIException
|
||||
{
|
||||
if ( items.length == 0 )
|
||||
{
|
||||
return new ResultSet<Integer> ();
|
||||
}
|
||||
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addInParamAsInt ( items.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( items, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( state ? 1 : 0, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
final Object[] result = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
final Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
final ResultSet<Integer> results = new ResultSet<Integer> ( items.length );
|
||||
for ( int i = 0; i < items.length; i++ )
|
||||
{
|
||||
results.add ( new Result<Integer> ( items[i], errorCodes[i] ) );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
public ResultSet<Integer> setClientHandles ( final Integer[] serverHandles, final Integer[] clientHandles ) throws JIException
|
||||
{
|
||||
if ( serverHandles.length != clientHandles.length )
|
||||
{
|
||||
throw new JIException ( 0, "Array sizes don't match" );
|
||||
}
|
||||
if ( serverHandles.length == 0 )
|
||||
{
|
||||
return new ResultSet<Integer> ();
|
||||
}
|
||||
|
||||
final JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 4 );
|
||||
|
||||
callObject.addInParamAsInt ( serverHandles.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( serverHandles, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( clientHandles, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
final Object[] result = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
final Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
final ResultSet<Integer> results = new ResultSet<Integer> ( serverHandles.length );
|
||||
for ( int i = 0; i < serverHandles.length; i++ )
|
||||
{
|
||||
results.add ( new Result<Integer> ( serverHandles[i], errorCodes[i] ) );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
import org.openscada.opc.dcom.common.KeyedResult;
|
||||
import org.openscada.opc.dcom.common.KeyedResultSet;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.common.impl.Helper;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.PropertyDescription;
|
||||
|
||||
public class OPCItemProperties extends BaseCOMObject
|
||||
{
|
||||
public OPCItemProperties ( final IJIComObject opcItemProperties ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcItemProperties.queryInterface ( Constants.IOPCItemProperties_IID ) );
|
||||
}
|
||||
|
||||
public Collection<PropertyDescription> queryAvailableProperties ( final String itemID ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addInParamAsString ( itemID, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_BSTR ), null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Short.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object result[] = getCOMObject ().call ( callObject );
|
||||
|
||||
List<PropertyDescription> properties = new LinkedList<PropertyDescription> ();
|
||||
|
||||
int len = (Integer)result[0];
|
||||
Integer[] ids = (Integer[]) ( (JIArray) ( (JIPointer)result[1] ).getReferent () ).getArrayInstance ();
|
||||
JIString[] descriptions = (JIString[]) ( (JIArray) ( (JIPointer)result[2] ).getReferent () ).getArrayInstance ();
|
||||
Short[] variableTypes = (Short[]) ( (JIArray) ( (JIPointer)result[3] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
for ( int i = 0; i < len; i++ )
|
||||
{
|
||||
PropertyDescription pd = new PropertyDescription ();
|
||||
pd.setId ( ids[i] );
|
||||
pd.setDescription ( descriptions[i].getString () );
|
||||
pd.setVarType ( variableTypes[i] );
|
||||
properties.add ( pd );
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
|
||||
public KeyedResultSet<Integer, JIVariant> getItemProperties ( final String itemID, final int... properties ) throws JIException
|
||||
{
|
||||
if ( properties.length == 0 )
|
||||
{
|
||||
return new KeyedResultSet<Integer, JIVariant> ();
|
||||
}
|
||||
|
||||
Integer[] ids = new Integer[properties.length];
|
||||
for ( int i = 0; i < properties.length; i++ )
|
||||
{
|
||||
ids[i] = properties[i];
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addInParamAsString ( itemID, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addInParamAsInt ( properties.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( ids, true ), JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( JIVariant.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
JIVariant[] values = (JIVariant[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[1] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
KeyedResultSet<Integer, JIVariant> results = new KeyedResultSet<Integer, JIVariant> ();
|
||||
for ( int i = 0; i < properties.length; i++ )
|
||||
{
|
||||
results.add ( new KeyedResult<Integer, JIVariant> ( properties[i], values[i], errorCodes[i] ) );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
public KeyedResultSet<Integer, String> lookupItemIDs ( final String itemID, final int... properties ) throws JIException
|
||||
{
|
||||
if ( properties.length == 0 )
|
||||
{
|
||||
return new KeyedResultSet<Integer, String> ();
|
||||
}
|
||||
|
||||
Integer[] ids = new Integer[properties.length];
|
||||
for ( int i = 0; i < properties.length; i++ )
|
||||
{
|
||||
ids[i] = properties[i];
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addInParamAsString ( itemID, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addInParamAsInt ( properties.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( ids, true ), JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( new JIPointer ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ), null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
JIPointer[] itemIDs = (JIPointer[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[1] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
KeyedResultSet<Integer, String> results = new KeyedResultSet<Integer, String> ();
|
||||
|
||||
for ( int i = 0; i < properties.length; i++ )
|
||||
{
|
||||
results.add ( new KeyedResult<Integer, String> ( properties[i], ( (JIString)itemIDs[i].getReferent () ).getString (), errorCodes[i] ) );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.common.impl.EnumString;
|
||||
import org.openscada.opc.dcom.common.impl.Helper;
|
||||
import org.openscada.opc.dcom.common.impl.OPCCommon;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.OPCENUMSCOPE;
|
||||
import org.openscada.opc.dcom.da.OPCSERVERSTATUS;
|
||||
|
||||
public class OPCServer extends BaseCOMObject
|
||||
{
|
||||
public OPCServer ( final IJIComObject opcServer ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
super ( opcServer.queryInterface ( Constants.IOPCServer_IID ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the current server status
|
||||
* @return the current server status
|
||||
* @throws JIException
|
||||
*/
|
||||
public OPCSERVERSTATUS getStatus () throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 3 );
|
||||
|
||||
callObject.addOutParamAsObject ( new JIPointer ( OPCSERVERSTATUS.getStruct () ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
return OPCSERVERSTATUS.fromStruct ( (JIStruct) ( (JIPointer)result[0] ).getReferent () );
|
||||
}
|
||||
|
||||
public OPCGroupStateMgt addGroup ( final String name, final boolean active, final int updateRate, final int clientHandle, final Integer timeBias, final Float percentDeadband, final int localeID ) throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addInParamAsString ( name, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addInParamAsInt ( active ? 1 : 0, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( updateRate, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( clientHandle, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsPointer ( new JIPointer ( timeBias ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsPointer ( new JIPointer ( percentDeadband ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( localeID, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( Integer.class, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsUUID ( Constants.IOPCGroupStateMgt_IID, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
return new OPCGroupStateMgt ( (IJIComObject)result[2] );
|
||||
}
|
||||
|
||||
public void removeGroup ( final int serverHandle, final boolean force ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 4 );
|
||||
|
||||
callObject.addInParamAsInt ( serverHandle, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( force ? 1 : 0, JIFlags.FLAG_NULL );
|
||||
|
||||
getCOMObject ().call ( callObject );
|
||||
}
|
||||
|
||||
public void removeGroup ( final OPCGroupStateMgt group, final boolean force ) throws JIException
|
||||
{
|
||||
removeGroup ( group.getState ().getServerHandle (), force );
|
||||
}
|
||||
|
||||
public OPCGroupStateMgt getGroupByName ( final String name ) throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addInParamAsString ( name, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addInParamAsUUID ( Constants.IOPCGroupStateMgt_IID, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
|
||||
return new OPCGroupStateMgt ( (IJIComObject)result[0] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the groups
|
||||
* @param scope The scope to get
|
||||
* @return A string enumerator with the groups
|
||||
* @throws JIException
|
||||
* @throws IllegalArgumentException
|
||||
* @throws UnknownHostException
|
||||
*/
|
||||
public EnumString getGroups ( final OPCENUMSCOPE scope ) throws JIException, IllegalArgumentException, UnknownHostException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 5 );
|
||||
|
||||
callObject.addInParamAsShort ( (short)scope.id (), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsUUID ( org.openscada.opc.dcom.common.Constants.IEnumString_IID, JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
return new EnumString ( (IJIComObject)result[0] );
|
||||
}
|
||||
|
||||
public OPCItemProperties getItemPropertiesService ()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new OPCItemProperties ( getCOMObject () );
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public OPCItemIO getItemIOService ()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new OPCItemIO ( getCOMObject () );
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the browser object (<code>IOPCBrowseServerAddressSpace</code>) from the server instance
|
||||
* @return the browser object
|
||||
*/
|
||||
public OPCBrowseServerAddressSpace getBrowser ()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new OPCBrowseServerAddressSpace ( getCOMObject () );
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the common interface if supported
|
||||
* @return the common interface or <code>null</code> if it is not supported
|
||||
*/
|
||||
public OPCCommon getCommon ()
|
||||
{
|
||||
try
|
||||
{
|
||||
return new OPCCommon ( getCOMObject () );
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.da.impl;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIStruct;
|
||||
import org.jinterop.dcom.core.JIVariant;
|
||||
import org.openscada.opc.dcom.common.KeyedResult;
|
||||
import org.openscada.opc.dcom.common.KeyedResultSet;
|
||||
import org.openscada.opc.dcom.common.Result;
|
||||
import org.openscada.opc.dcom.common.ResultSet;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.common.impl.Helper;
|
||||
import org.openscada.opc.dcom.da.Constants;
|
||||
import org.openscada.opc.dcom.da.OPCDATASOURCE;
|
||||
import org.openscada.opc.dcom.da.OPCITEMSTATE;
|
||||
import org.openscada.opc.dcom.da.WriteRequest;
|
||||
|
||||
public class OPCSyncIO extends BaseCOMObject
|
||||
{
|
||||
public OPCSyncIO ( final IJIComObject opcSyncIO ) throws JIException
|
||||
{
|
||||
super ( opcSyncIO.queryInterface ( Constants.IOPCSyncIO_IID ) );
|
||||
}
|
||||
|
||||
public KeyedResultSet<Integer, OPCITEMSTATE> read ( final OPCDATASOURCE source, final Integer... serverHandles ) throws JIException
|
||||
{
|
||||
if ( serverHandles == null || serverHandles.length == 0 )
|
||||
{
|
||||
return new KeyedResultSet<Integer, OPCITEMSTATE> ();
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
callObject.addInParamAsShort ( (short)source.id (), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsInt ( serverHandles.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( serverHandles, true ), JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( OPCITEMSTATE.getStruct (), null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
KeyedResultSet<Integer, OPCITEMSTATE> results = new KeyedResultSet<Integer, OPCITEMSTATE> ();
|
||||
JIStruct[] states = (JIStruct[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[1] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
for ( int i = 0; i < serverHandles.length; i++ )
|
||||
{
|
||||
results.add ( new KeyedResult<Integer, OPCITEMSTATE> ( serverHandles[i], OPCITEMSTATE.fromStruct ( states[i] ), errorCodes[i] ) );
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
public ResultSet<WriteRequest> write ( final WriteRequest... requests ) throws JIException
|
||||
{
|
||||
if ( requests.length == 0 )
|
||||
{
|
||||
return new ResultSet<WriteRequest> ();
|
||||
}
|
||||
|
||||
Integer[] items = new Integer[requests.length];
|
||||
JIVariant[] values = new JIVariant[requests.length];
|
||||
for ( int i = 0; i < requests.length; i++ )
|
||||
{
|
||||
items[i] = requests[i].getServerHandle ();
|
||||
values[i] = Helper.fixVariant ( requests[i].getValue () );
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addInParamAsInt ( requests.length, JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( items, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addInParamAsArray ( new JIArray ( values, true ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIArray ( Integer.class, null, 1, true ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
Integer[] errorCodes = (Integer[]) ( (JIArray) ( (JIPointer)result[0] ).getReferent () ).getArrayInstance ();
|
||||
|
||||
ResultSet<WriteRequest> results = new ResultSet<WriteRequest> ();
|
||||
for ( int i = 0; i < requests.length; i++ )
|
||||
{
|
||||
results.add ( new Result<WriteRequest> ( requests[i], errorCodes[i] ) );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.list;
|
||||
|
||||
/**
|
||||
* Details about an OPC server class
|
||||
* @author Jens Reimann <jens.reimann@th4-systems.com>
|
||||
* @since 0.1.8
|
||||
*/
|
||||
public class ClassDetails
|
||||
{
|
||||
private String _clsId;
|
||||
|
||||
private String _progId;
|
||||
|
||||
private String _description;
|
||||
|
||||
public String getClsId ()
|
||||
{
|
||||
return this._clsId;
|
||||
}
|
||||
|
||||
public void setClsId ( final String clsId )
|
||||
{
|
||||
this._clsId = clsId;
|
||||
}
|
||||
|
||||
public String getDescription ()
|
||||
{
|
||||
return this._description;
|
||||
}
|
||||
|
||||
public void setDescription ( final String description )
|
||||
{
|
||||
this._description = description;
|
||||
}
|
||||
|
||||
public String getProgId ()
|
||||
{
|
||||
return this._progId;
|
||||
}
|
||||
|
||||
public void setProgId ( final String progId )
|
||||
{
|
||||
this._progId = progId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.list;
|
||||
|
||||
public interface Constants extends org.openscada.opc.dcom.common.Constants
|
||||
{
|
||||
public static final String IOPCServerList_IID = "13486D50-4821-11D2-A494-3CB306C10000";
|
||||
|
||||
public static final String OPCServerList_CLSID = "13486D51-4821-11D2-A494-3CB306C10000";
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* This file is part of the OpenSCADA project
|
||||
* Copyright (C) 2006-2010 TH4 SYSTEMS GmbH (http://th4-systems.com)
|
||||
*
|
||||
* OpenSCADA is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License version 3
|
||||
* only, as published by the Free Software Foundation.
|
||||
*
|
||||
* OpenSCADA is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License version 3 for more details
|
||||
* (a copy is included in the LICENSE file that accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with OpenSCADA. If not, see
|
||||
* <http://opensource.org/licenses/lgpl-3.0.html> for a copy of the LGPLv3 License.
|
||||
*/
|
||||
|
||||
package org.openscada.opc.dcom.list.impl;
|
||||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jinterop.dcom.common.JIException;
|
||||
import org.jinterop.dcom.core.IJIComObject;
|
||||
import org.jinterop.dcom.core.JIArray;
|
||||
import org.jinterop.dcom.core.JICallBuilder;
|
||||
import org.jinterop.dcom.core.JIClsid;
|
||||
import org.jinterop.dcom.core.JIFlags;
|
||||
import org.jinterop.dcom.core.JIPointer;
|
||||
import org.jinterop.dcom.core.JIString;
|
||||
import org.openscada.opc.dcom.common.impl.BaseCOMObject;
|
||||
import org.openscada.opc.dcom.common.impl.EnumGUID;
|
||||
import org.openscada.opc.dcom.common.impl.Helper;
|
||||
import org.openscada.opc.dcom.list.ClassDetails;
|
||||
import org.openscada.opc.dcom.list.Constants;
|
||||
|
||||
import rpc.core.UUID;
|
||||
|
||||
/**
|
||||
* This class implements the IOPCServerList (aka OPCEnum) service.
|
||||
* @author Jens Reimann <jens.reimann@th4-systems.com>
|
||||
*
|
||||
*/
|
||||
public class OPCServerList extends BaseCOMObject
|
||||
{
|
||||
public OPCServerList ( final IJIComObject listObject ) throws JIException
|
||||
{
|
||||
super ( listObject.queryInterface ( Constants.IOPCServerList_IID ) );
|
||||
}
|
||||
|
||||
public JIClsid getCLSIDFromProgID ( final String progId ) throws JIException
|
||||
{
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 2 );
|
||||
|
||||
callObject.addInParamAsString ( progId, JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR );
|
||||
callObject.addOutParamAsType ( UUID.class, JIFlags.FLAG_NULL );
|
||||
|
||||
try
|
||||
{
|
||||
Object[] result = getCOMObject ().call ( callObject );
|
||||
return JIClsid.valueOf ( ( (UUID)result[0] ).toString () );
|
||||
}
|
||||
catch ( JIException e )
|
||||
{
|
||||
if ( e.getErrorCode () == 0x800401F3 )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return details about a serve class
|
||||
* @param clsId A server class
|
||||
* @throws JIException
|
||||
*/
|
||||
public ClassDetails getClassDetails ( final JIClsid clsId ) throws JIException
|
||||
{
|
||||
if ( clsId == null )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 1 );
|
||||
|
||||
callObject.addInParamAsUUID ( clsId.getCLSID (), JIFlags.FLAG_NULL );
|
||||
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ), JIFlags.FLAG_NULL );
|
||||
callObject.addOutParamAsObject ( new JIPointer ( new JIString ( JIFlags.FLAG_REPRESENTATION_STRING_LPWSTR ) ), JIFlags.FLAG_NULL );
|
||||
|
||||
Object[] result = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
ClassDetails cd = new ClassDetails ();
|
||||
cd.setClsId ( clsId.getCLSID () );
|
||||
cd.setProgId ( ( (JIString) ( (JIPointer)result[0] ).getReferent () ).getString () );
|
||||
cd.setDescription ( ( (JIString) ( (JIPointer)result[1] ).getReferent () ).getString () );
|
||||
|
||||
return cd;
|
||||
}
|
||||
|
||||
/*
|
||||
HRESULT EnumClassesOfCategories(
|
||||
[in] ULONG cImplemented,
|
||||
[in,size_is(cImplemented)] CATID rgcatidImpl[],
|
||||
[in] ULONG cRequired,
|
||||
[in,size_is(cRequired)] CATID rgcatidReq[],
|
||||
[out] IEnumGUID ** ppenumClsid
|
||||
);
|
||||
*/
|
||||
|
||||
public EnumGUID enumClassesOfCategories ( final String[] implemented, final String[] required ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
UUID[] u1 = new UUID[implemented.length];
|
||||
UUID[] u2 = new UUID[required.length];
|
||||
|
||||
for ( int i = 0; i < implemented.length; i++ )
|
||||
{
|
||||
u1[i] = new UUID ( implemented[i] );
|
||||
}
|
||||
|
||||
for ( int i = 0; i < required.length; i++ )
|
||||
{
|
||||
u2[i] = new UUID ( required[i] );
|
||||
}
|
||||
|
||||
return enumClassesOfCategories ( u1, u2 );
|
||||
}
|
||||
|
||||
public EnumGUID enumClassesOfCategories ( final UUID[] implemented, final UUID[] required ) throws IllegalArgumentException, UnknownHostException, JIException
|
||||
{
|
||||
// ** CALL
|
||||
JICallBuilder callObject = new JICallBuilder ( true );
|
||||
callObject.setOpnum ( 0 );
|
||||
|
||||
// ** IN
|
||||
callObject.addInParamAsInt ( implemented.length, JIFlags.FLAG_NULL );
|
||||
if ( implemented.length == 0 )
|
||||
{
|
||||
callObject.addInParamAsPointer ( new JIPointer ( null ), JIFlags.FLAG_NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
callObject.addInParamAsArray ( new JIArray ( implemented, true ), JIFlags.FLAG_NULL );
|
||||
}
|
||||
|
||||
callObject.addInParamAsInt ( required.length, JIFlags.FLAG_NULL );
|
||||
if ( required.length == 0 )
|
||||
{
|
||||
callObject.addInParamAsPointer ( new JIPointer ( null ), JIFlags.FLAG_NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
callObject.addInParamAsArray ( new JIArray ( required, true ), JIFlags.FLAG_NULL );
|
||||
}
|
||||
|
||||
// ** OUT
|
||||
callObject.addOutParamAsType ( IJIComObject.class, JIFlags.FLAG_NULL );
|
||||
|
||||
// ** RESULT
|
||||
Object result[] = Helper.callRespectSFALSE ( getCOMObject (), callObject );
|
||||
|
||||
return new EnumGUID ( (IJIComObject)result[0] );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
#progId Vs ClsidDB
|
||||
#Tue Nov 28 21:56:16 IST 2006
|
||||
Word.Application=000209ff-0000-0000-c000-000000000046
|
||||
TestCOM123.TestServer2=92a065a9-106a-4cc3-8d67-43e3a1e73df3
|
||||
SYSINFO.SysInfo=6fba474b-43ac-11ce-9a0e-00aa0062bb4c
|
||||
ADODB.Connection=00000514-0000-0010-8000-00aa006d2ea4
|
||||
TestJavaServer.TestServer2=617d5a31-a3bf-440f-a58f-1f57f6ac7527
|
||||
TestJavaServer.TestServer1=56bad610-0fcb-418a-b25e-174159a4adce
|
||||
InternetExplorer.Application=0002df01-0000-0000-c000-000000000046
|
||||
Excel.Application=00024500-0000-0000-c000-000000000046
|
||||
StdCollection.VBCollection=4b738074-ea47-11d2-b25a-00105a022091
|
||||
WbemScripting.SWbemLocator=76a64158-cb41-11d1-8b02-00600806d9b6
|
||||
PowerPoint.Application=91493441-5a91-11cf-8700-00aa0060263b
|
||||
Reference in New Issue
Block a user