Skip to content

Commit 19d42ec

Browse files
committed
create a monitored from action menu
1 parent d9a8455 commit 19d42ec

5 files changed

Lines changed: 103 additions & 13 deletions

File tree

-6 Bytes
Binary file not shown.
-208 Bytes
Binary file not shown.

app/src/main/java/org/twistedappdeveloper/opcclient/BrowseFragment.java

Lines changed: 99 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@
2828
import org.opcfoundation.ua.builtintypes.ExtensionObject;
2929
import org.opcfoundation.ua.builtintypes.NodeId;
3030
import org.opcfoundation.ua.builtintypes.StatusCode;
31+
import org.opcfoundation.ua.builtintypes.UnsignedByte;
3132
import org.opcfoundation.ua.builtintypes.UnsignedInteger;
3233
import org.opcfoundation.ua.builtintypes.Variant;
3334
import org.opcfoundation.ua.core.Attributes;
3435
import org.opcfoundation.ua.core.CreateMonitoredItemsRequest;
36+
import org.opcfoundation.ua.core.CreateSubscriptionRequest;
3537
import org.opcfoundation.ua.core.DataChangeFilter;
3638
import org.opcfoundation.ua.core.DataChangeTrigger;
3739
import org.opcfoundation.ua.core.DeadbandType;
@@ -47,12 +49,14 @@
4749

4850
import OpcUtils.BrowseDataStamp;
4951
import OpcUtils.ConnectionThread.ThreadCreateMonitoredItem;
52+
import OpcUtils.ConnectionThread.ThreadCreateSubscription;
5053
import OpcUtils.ConnectionThread.ThreadRead;
5154
import OpcUtils.ConnectionThread.ThreadWrite;
5255
import OpcUtils.ManagerOPC;
5356
import OpcUtils.SessionElement;
5457
import OpcUtils.SubscriptionElement;
5558
import tool.ui.NodeAdapter;
59+
import tool.ui.SubscriptionAdapter;
5660

5761
public class BrowseFragment extends Fragment {
5862
Bundle bundle;
@@ -131,16 +135,100 @@ public void onClick(DialogInterface dialog, int which) {
131135
return view;
132136
}
133137

134-
private void createMonItem(int position){
135-
136-
137-
if(sessionElement.getSubscriptions().isEmpty()){
138-
//creo sottoscrizione
139-
}else{
140-
//chiedo quale sottoscrizione usare
138+
private void createMonItem(final int position) {
139+
if (sessionElement.getSubscriptions().isEmpty()) {
140+
Toast.makeText(getContext(),getString(R.string.createSubscriptionMon),Toast.LENGTH_LONG).show();
141+
142+
final Dialog dialog_subscription = new Dialog(getContext(), R.style.AppAlert);
143+
dialog_subscription.setContentView(R.layout.dialog_insertdatasubscription);
144+
145+
final EditText edtRequestedPublishInteval = dialog_subscription.findViewById(R.id.edtRequestedPublishingInterval);
146+
final EditText edtRequestedMaxKeepAliveCount = dialog_subscription.findViewById(R.id.edtRequestedMaxKeepAliveCount);
147+
final EditText edtRequestedLifetimeCount = dialog_subscription.findViewById(R.id.edtRequestedLifetimeCount);
148+
final EditText edtMaxNotificationPerPublish = dialog_subscription.findViewById(R.id.edtMaxNotificationPerPublish);
149+
final EditText edtPriority = dialog_subscription.findViewById(R.id.edtPriotity);
150+
final CheckBox checkPublishingEnable = dialog_subscription.findViewById(R.id.checkPublishingEnable);
151+
Button btnOkSubscription = dialog_subscription.findViewById(R.id.btnOkSubscription);
152+
153+
edtRequestedLifetimeCount.setHint("Ex: " + ManagerOPC.Default_RequestedLifetimeCount);
154+
edtMaxNotificationPerPublish.setHint("Ex: " + ManagerOPC.Default_MaxNotificationsPerPublish);
155+
edtRequestedPublishInteval.setHint("Ex: " + ManagerOPC.Default_RequestedPublishingInterval);
156+
edtRequestedMaxKeepAliveCount.setHint("Ex: " + ManagerOPC.Default_RequestedMaxKeepAliveCount);
157+
edtPriority.setHint("Ex: " + ManagerOPC.Default_Priority);
158+
159+
btnOkSubscription.setOnClickListener(new View.OnClickListener() {
160+
@Override
161+
public void onClick(View v) {
162+
Double requestedPublishInterval;
163+
UnsignedInteger requestedLifetimeCount;
164+
UnsignedInteger requestedMaxKeepAliveCount;
165+
UnsignedInteger maxNotificationPerPublish;
166+
UnsignedByte priority;
167+
boolean publishingEnabled;
168+
169+
if (edtRequestedLifetimeCount.getText().toString().length() == 0 ||
170+
edtMaxNotificationPerPublish.getText().toString().length() == 0 ||
171+
edtRequestedPublishInteval.getText().toString().length() == 0 ||
172+
edtRequestedMaxKeepAliveCount.getText().toString().length() == 0 ||
173+
edtPriority.getText().toString().length() == 0) {
174+
Toast.makeText(getContext(), R.string.InserisciValoriValidi, Toast.LENGTH_LONG).show();
175+
} else {
176+
requestedLifetimeCount = new UnsignedInteger(edtRequestedLifetimeCount.getText().toString());
177+
maxNotificationPerPublish = new UnsignedInteger(edtMaxNotificationPerPublish.getText().toString());
178+
requestedPublishInterval = Double.parseDouble(edtRequestedPublishInteval.getText().toString());
179+
requestedMaxKeepAliveCount = new UnsignedInteger(edtRequestedMaxKeepAliveCount.getText().toString());
180+
priority = new UnsignedByte(edtPriority.getText().toString());
181+
publishingEnabled = checkPublishingEnable.isChecked();
182+
if (requestedLifetimeCount.intValue() >= 3 * requestedMaxKeepAliveCount.intValue()) {
183+
CreateSubscriptionRequest req = new CreateSubscriptionRequest(null, requestedPublishInterval, requestedLifetimeCount, requestedMaxKeepAliveCount, maxNotificationPerPublish, publishingEnabled, priority);
184+
ThreadCreateSubscription t = new ThreadCreateSubscription(sessionElement, req);
185+
final ProgressDialog progressDialog = ProgressDialog.show(getContext(),getString(R.string.TentativoDiConnessione), getString(R.string.CreazioneSottoscrizione), true);
186+
@SuppressLint("HandlerLeak") Handler handler_subscription = new Handler() {
187+
@Override
188+
public void handleMessage(Message msg) {
189+
progressDialog.dismiss();
190+
if (msg.what == -1) {
191+
Toast.makeText(getContext(), getString(R.string.SottoscrizioneFallita) + ((StatusCode) msg.obj).getDescription() + "\nCode: " + ((StatusCode) msg.obj).getValue().toString(), Toast.LENGTH_LONG).show();
192+
} else if (msg.what == -2) {
193+
Toast.makeText(getContext(), R.string.ServerDown, Toast.LENGTH_LONG).show();
194+
} else {
195+
int position = (int) msg.obj;
196+
createMonitoredItemWithSubscription(sessionElement.getSubscriptions().get(position), position);
197+
}
198+
}
199+
};
200+
dialog_subscription.dismiss();
201+
t.start(handler_subscription);
202+
} else {
203+
Toast.makeText(getContext(), getString(R.string.DeviRispettareVincolo) + "\nLifetimeCount>3*MaxKeepAliveCount", Toast.LENGTH_LONG).show();
204+
}
205+
}
206+
}
207+
});
208+
209+
dialog_subscription.show();
210+
211+
} else {
212+
ListView listSubscriptions;
213+
SubscriptionAdapter adapter;
214+
215+
final Dialog dialog = new Dialog(getContext(), R.style.AppAlert);
216+
dialog.setContentView(R.layout.activity_list_subscription);
217+
listSubscriptions = dialog.findViewById(R.id.listSubscriptions);
218+
adapter = new SubscriptionAdapter(getContext(), R.layout.list_subscriptions, sessionElement.getSubscriptions());
219+
listSubscriptions.setAdapter(adapter);
220+
listSubscriptions.setOnItemClickListener(new AdapterView.OnItemClickListener() {
221+
@Override
222+
public void onItemClick(AdapterView<?> parent, View view, int subPosition, long id) {
223+
createMonitoredItemWithSubscription(sessionElement.getSubscriptions().get(subPosition), position);
224+
dialog.dismiss();
225+
}
226+
});
227+
dialog.show();
141228
}
142-
final SubscriptionElement subscriptionElement = sessionElement.getSubscriptions().get(0); //todo gestire ricerca ed eventuale creazione sottoscrizione
229+
}
143230

231+
private void createMonitoredItemWithSubscription(final SubscriptionElement subscriptionElement, int position) {
144232
final MonitoredItemCreateRequest[] monitoredItems = new MonitoredItemCreateRequest[1];
145233
monitoredItems[0] = new MonitoredItemCreateRequest();
146234

@@ -175,7 +263,7 @@ private void createMonItem(int position){
175263

176264
int namespace, nodeid;
177265
String nodeid_String;
178-
double sampling_interval,deadband;
266+
double sampling_interval, deadband;
179267
UnsignedInteger queue_size;
180268
boolean discard_oldest;
181269

@@ -248,7 +336,7 @@ public void onClick(View v) {
248336
mi.setItemsToCreate(monitoredItems);
249337

250338
ThreadCreateMonitoredItem t = new ThreadCreateMonitoredItem(subscriptionElement, mi);
251-
final ProgressDialog progressDialog = ProgressDialog.show( getContext(), getString(R.string.TentativoDiConnessione), getString(R.string.CreazioneMonItemInCorso), true);
339+
final ProgressDialog progressDialog = ProgressDialog.show(getContext(), getString(R.string.TentativoDiConnessione), getString(R.string.CreazioneMonItemInCorso), true);
252340
@SuppressLint("HandlerLeak") Handler handler_monitoreditem = new Handler() {
253341
@Override
254342
public void handleMessage(Message msg) {
@@ -394,7 +482,7 @@ private void writeNode(int position) {
394482
public void onClick(View v) {
395483
int namespace, nodeid;
396484
String nodeid_string;
397-
Variant value_write= null;
485+
Variant value_write = null;
398486

399487
if (edtnamespace_write.getText().toString().length() == 0 || edtnodeid_write.getText().toString().length() == 0 || edtvalue_write.getText().toString().length() == 0) {
400488
Toast.makeText(getContext(), R.string.InserisciValoriValidi, Toast.LENGTH_SHORT).show();

app/src/main/res/values-it/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<string name="insertaddress">Inserisci l\'indirizzo del Server OPC UA</string>
66
<string name="protocolloopctcp">Elenco degli endpoint</string>
77
<string name="exindirizzo">Es. 192.168.1.3:51210</string>
8-
<string name="elencosottoscrizioni">Elenco sottoscrizioni</string>
8+
<string name="elencosottoscrizioni">Seleziona la Sottoscrizione da usare</string>
99
<string name="monitoraggiosessione">Monitoraggio Sessione</string>
1010
<string name="operazionelettura">Operazione di lettura</string>
1111
<string name="inseriscidatilettura">Inserisci i dati lettura</string>
@@ -74,6 +74,7 @@
7474
<string name="long_press_info">Tieni premuto un elemento della lista per aprire il Menu delle azioni.</string>
7575
<string name="menu_azioni">Menu Azioni</string>
7676
<string name="result">Risultato</string>
77+
<string name="createSubscriptionMon">Non sono presenti sottoscrizioni. Creane una adesso.</string>
7778

7879
<string-array name="timestamps">
7980
<item>Both</item>

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<string name="protocolloopctcp">Endpoints list</string>
88
<string name="exindirizzo">Ex. 192.168.1.3:51210</string>
99
<string name="browser" translatable="false">Browser</string>
10-
<string name="elencosottoscrizioni">Subscription List</string>
10+
<string name="elencosottoscrizioni">Select the Subscription to use</string>
1111
<string name="monitoraggiosessione">Session Monitoring</string>
1212
<string name="monitoreditem" translatable="false">Monitored Item</string>
1313
<string name="operazionelettura">Read Operation</string>
@@ -109,6 +109,7 @@
109109
<string name="long_press_info">Perform a long press touch on a item of the list to display the Action Menu.</string>
110110
<string name="menu_azioni">Action Menu</string>
111111
<string name="result">Result</string>
112+
<string name="createSubscriptionMon">No subscription present. Create one now</string>
112113

113114
<string-array name="timestamps">
114115
<item>Both</item>

0 commit comments

Comments
 (0)