View Javadoc
1   /*
2    * Copyright (C) 2013 4th Line GmbH, Switzerland
3    *
4    * The contents of this file are subject to the terms of either the GNU
5    * Lesser General Public License Version 2 or later ("LGPL") or the
6    * Common Development and Distribution License Version 1 or later
7    * ("CDDL") (collectively, the "License"). You may not use this file
8    * except in compliance with the License. See LICENSE.txt for more
9    * information.
10   *
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14   */
15  
16  package org.fourthline.cling.support.connectionmanager.callback;
17  
18  import org.fourthline.cling.controlpoint.ActionCallback;
19  import org.fourthline.cling.controlpoint.ControlPoint;
20  import org.fourthline.cling.model.action.ActionArgumentValue;
21  import org.fourthline.cling.model.action.ActionException;
22  import org.fourthline.cling.model.action.ActionInvocation;
23  import org.fourthline.cling.model.meta.Service;
24  import org.fourthline.cling.model.types.ErrorCode;
25  import org.fourthline.cling.support.model.ProtocolInfos;
26  
27  /**
28   * @author Christian Bauer
29   */
30  public abstract class GetProtocolInfo extends ActionCallback {
31  
32      public GetProtocolInfo(Service service) {
33          this(service, null);
34      }
35  
36      protected GetProtocolInfo(Service service, ControlPoint controlPoint) {
37          super(new ActionInvocation(service.getAction("GetProtocolInfo")), controlPoint);
38      }
39  
40      @Override
41      public void success(ActionInvocation invocation) {
42          try {
43              ActionArgumentValue sink = invocation.getOutput("Sink");
44              ActionArgumentValue source = invocation.getOutput("Source");
45  
46              received(
47                      invocation,
48                      sink != null ? new ProtocolInfos(sink.toString()) : null,
49                      source != null ? new ProtocolInfos(source.toString()) : null
50              );
51  
52          } catch (Exception ex) {
53              invocation.setFailure(
54                      new ActionException(ErrorCode.ACTION_FAILED, "Can't parse ProtocolInfo response: " + ex, ex)
55              );
56              failure(invocation, null);
57          }
58      }
59  
60      public abstract void received(ActionInvocation actionInvocation, ProtocolInfos sinkProtocolInfos, ProtocolInfos sourceProtocolInfos);
61  
62  }