Search in sources :

Example 1 with ArgumentList

use of org.cybergarage.upnp.ArgumentList in project felix by apache.

the class BuildDevice method addServices.

/**
 * Method used to create a new Service in CyberLink world without creating the XML
 *
 * @param id ServiceId
 * @param devUPnP the CyberLink device that where the new Service will be created
 * @param sr ServiceReference to OSGi Device that used as source of the information
 *              for the creation of the device
 */
private static void addServices(String id, Device devUPnP, ServiceReference sr) {
    UPnPDevice devOSGi = (UPnPDevice) Activator.bc.getService(sr);
    if (devOSGi == null) {
        // added by twa to prevent a null pointer exception
        Activator.logger.WARNING("UPnP Device that cotains serviceId=" + id + " is deregistered from the framework while is exported");
        return;
    }
    UPnPService[] services = devOSGi.getServices();
    if (services == null || services.length == 0)
        return;
    for (int i = 0; i < services.length; i++) {
        Service ser = new Service();
        devUPnP.addService(ser);
        ser.setServiceType(services[i].getType());
        ser.setServiceID(services[i].getId());
        ser.setSCPDURL(id + "/service/" + i + "/gen-desc.xml");
        ser.setDescriptionURL(id + "/service/" + i + "/gen-desc.xml");
        ser.setControlURL(id + "/service/" + i + "/ctrl");
        ser.setEventSubURL(id + "/service/" + i + "/event");
        UPnPAction[] actions = services[i].getActions();
        for (int j = 0; j < actions.length; j++) {
            boolean valid = true;
            Action act = new Action(ser.getServiceNode());
            act.setName(actions[j].getName());
            ArgumentList al = new ArgumentList();
            String[] names = actions[j].getInputArgumentNames();
            if (names != null) {
                for (int k = 0; k < names.length; k++) {
                    UPnPStateVariable variable = actions[j].getStateVariable(names[k]);
                    if (variable == null) {
                        /*
                             * //TODO Create a stict and relaxed behavior of the base driver which 
                             * export as much it can or export only 100% complaint UPnPDevice service 
                             */
                        Activator.logger.WARNING("UPnP Device that cotains serviceId=" + id + " contains the action " + actions[j].getName() + " with the Input argument " + names[k] + " not related to any UPnPStateVariable. Thus this action won't be exported");
                        valid = false;
                        break;
                    }
                    Argument a = new Argument();
                    a.setDirection(Argument.IN);
                    a.setName(names[k]);
                    a.setRelatedStateVariableName(variable.getName());
                    al.add(a);
                }
            }
            names = actions[j].getOutputArgumentNames();
            if (names != null && valid) {
                for (int k = 0; k < names.length; k++) {
                    UPnPStateVariable variable = actions[j].getStateVariable(names[k]);
                    if (variable == null) {
                        /*
                             * //TODO Create a stict and relaxed behavior of the base driver which 
                             * export as much it can or export only 100% complaint UPnPDevice service 
                             */
                        Activator.logger.WARNING("UPnP Device that cotains serviceId=" + id + " contains the action " + actions[j].getName() + " with the Output argument " + names[k] + " not related to any UPnPStateVariable. Thus this action won't be exported");
                    }
                    Argument a = new Argument();
                    a.setDirection(Argument.OUT);
                    a.setName(names[k]);
                    a.setRelatedStateVariableName(variable.getName());
                    al.add(a);
                }
            }
            if (valid) {
                act.setArgumentList(al);
                ser.addAction(act);
            }
        }
        UPnPStateVariable[] vars = services[i].getStateVariables();
        for (int j = 0; j < vars.length; j++) {
            StateVariable var = new StateVariable();
            var.setDataType(vars[j].getUPnPDataType());
            var.setName(vars[j].getName());
            var.setSendEvents(vars[j].sendsEvents());
            String[] values = vars[j].getAllowedValues();
            if (values != null) {
                AllowedValueList avl = new AllowedValueList(values);
                var.setAllowedValueList(avl);
            } else if (vars[j].getMaximum() != null) {
                AllowedValueRange avr = new AllowedValueRange(vars[j].getMaximum(), vars[j].getMinimum(), vars[j].getStep());
                var.setAllowedValueRange(avr);
            }
            if (vars[j].getDefaultValue() != null)
                try {
                    var.setDefaultValue(Converter.toString(vars[j].getDefaultValue(), vars[j].getUPnPDataType()));
                } catch (Exception ignored) {
                }
            ser.addStateVariable(var);
        }
        Activator.bc.ungetService(sr);
    }
}
Also used : UPnPAction(org.osgi.service.upnp.UPnPAction) Action(org.cybergarage.upnp.Action) AllowedValueList(org.cybergarage.upnp.AllowedValueList) AllowedValueRange(org.cybergarage.upnp.AllowedValueRange) Argument(org.cybergarage.upnp.Argument) UPnPStateVariable(org.osgi.service.upnp.UPnPStateVariable) StateVariable(org.cybergarage.upnp.StateVariable) UPnPService(org.osgi.service.upnp.UPnPService) Service(org.cybergarage.upnp.Service) UPnPStateVariable(org.osgi.service.upnp.UPnPStateVariable) ArgumentList(org.cybergarage.upnp.ArgumentList) InvalidSyntaxException(org.osgi.framework.InvalidSyntaxException) UPnPDevice(org.osgi.service.upnp.UPnPDevice) UPnPService(org.osgi.service.upnp.UPnPService) UPnPAction(org.osgi.service.upnp.UPnPAction)

Example 2 with ArgumentList

use of org.cybergarage.upnp.ArgumentList in project i2p.i2p by i2p.

the class UPnP method listActionsArguments.

/**
 * debug only
 */
private static void listActionsArguments(Action action, StringBuilder sb) {
    ArgumentList ar = action.getArgumentList();
    sb.append("<ol>");
    for (int i = 0; i < ar.size(); i++) {
        Argument argument = ar.getArgument(i);
        if (argument == null)
            continue;
        sb.append("<li><small>argument : ").append(DataHelper.escapeHTML(argument.getName())).append("</small></li>");
    }
    sb.append("</ol>");
}
Also used : Argument(org.cybergarage.upnp.Argument) ArgumentList(org.cybergarage.upnp.ArgumentList) ControlPoint(org.cybergarage.upnp.ControlPoint)

Example 3 with ArgumentList

use of org.cybergarage.upnp.ArgumentList in project felix by apache.

the class GeneralActionListener method actionControlReceived.

/**
 * @see org.cybergarage.upnp.control.ActionListener#actionControlReceived(org.cybergarage.upnp.Action)
 */
public synchronized boolean actionControlReceived(Action upnpAct) {
    if (!open)
        return false;
    UPnPService osgiServ = null;
    try {
        osgiServ = ((UPnPDevice) Activator.bc.getService(dev)).getService(id);
    } catch (Exception ignored) {
    }
    if (osgiServ == null)
        return exiting(false);
    UPnPAction osgiAct = osgiServ.getAction(upnpAct.getName());
    Properties inArgs = null;
    ArgumentList alIn = upnpAct.getInputArgumentList();
    ArgumentList alOut = upnpAct.getOutputArgumentList();
    String[] inArg = osgiAct.getInputArgumentNames();
    boolean invalidAction = false;
    if (inArg != null) {
        inArgs = new Properties();
        Argument arg;
        for (int j = 0; j < inArg.length; j++) {
            arg = alIn.getArgument(inArg[j]);
            try {
                inArgs.put(inArg[j], Converter.parseString(arg.getValue(), arg.getRelatedStateVariable().getDataType()));
            } catch (Exception e) {
                invalidAction = true;
                break;
            }
        }
    }
    Dictionary outArgs = null;
    try {
        outArgs = osgiAct.invoke(inArgs);
    } catch (UPnPException e) {
        // TODO Activator.logger.log()
        upnpAct.setStatus(e.getUPnPError_Code(), e.getMessage());
        invalidAction = true;
    } catch (Exception e) {
        // TODO Activator.logger.log()
        upnpAct.setStatus(UPnPStatus.ACTION_FAILED);
        invalidAction = true;
    }
    if (invalidAction)
        return exiting(false);
    String[] outArg = osgiAct.getOutputArgumentNames();
    if (outArg != null) {
        Argument arg;
        for (int j = 0; j < outArg.length; j++) {
            arg = alOut.getArgument(outArg[j]);
            try {
                arg.setValue(Converter.toString(outArgs.get(outArg[j]), arg.getRelatedStateVariable().getDataType()));
            } catch (Exception e) {
                e.printStackTrace();
                return exiting(false);
            }
        }
    }
    return exiting(true);
}
Also used : Dictionary(java.util.Dictionary) Argument(org.cybergarage.upnp.Argument) UPnPService(org.osgi.service.upnp.UPnPService) Properties(java.util.Properties) ArgumentList(org.cybergarage.upnp.ArgumentList) UPnPException(org.osgi.service.upnp.UPnPException) InvalidSyntaxException(org.osgi.framework.InvalidSyntaxException) UPnPException(org.osgi.service.upnp.UPnPException) UPnPAction(org.osgi.service.upnp.UPnPAction)

Example 4 with ArgumentList

use of org.cybergarage.upnp.ArgumentList in project felix by apache.

the class UPnPActionImpl method invoke.

/* (non-Javadoc)
	 * @see org.osgi.service.upnp.UPnPAction#invoke(java.util.Dictionary)
	 */
public Dictionary invoke(Dictionary args) throws Exception {
    /*TODO 
		check if I have understood wath this method should do
		*/
    /*
		 * I look for argument and value and then I add them to ArgumentList
		 */
    ArgumentList argsList = new ArgumentList();
    argsList = act.getInputArgumentList();
    for (int i = 0; i < argsList.size(); i++) {
        /*			
			 * I assert that .getArgument(i) will return to me an Argument with only the name of the
			 * Argument and not it's value. I'll set the associated value by myself and
			 * Also I assert that the Argument are ordered
			 */
        Argument argument = argsList.getArgument(i);
        String argumentName = argument.getName();
        // String relateVar=argument.getRelatedStateVariableName();
        UPnPStateVariable stateVar = this.getStateVariable(argumentName);
        String upnpType = stateVar.getUPnPDataType();
        /*Class javaClass=stateVar.getJavaDataType();*/
        // setting the value related to the input argument
        argument.setValue(Converter.toString(args.get(argumentName), upnpType));
    }
    act.setInArgumentValues(argsList);
    if (act.postControlAction() == true) {
        // TODO check what happen if I don't have any output argument
        Properties outDic = new Properties();
        ArgumentList outArgs = act.getOutputArgumentList();
        if (outArgs.size() == 0) {
            return null;
        }
        for (int i = 0; i < outArgs.size(); i++) {
            Argument argument = outArgs.getArgument(i);
            String argumentName = outArgs.getArgument(i).getName();
            // String relateVar=argument.getRelatedStateVariableName();
            UPnPStateVariable stateVar = getStateVariable(argumentName);
            // String javaType=stateVar.getJavaDataType().getName();
            // TODO rember to catch number exception
            String upnpType = stateVar.getUPnPDataType();
            outDic.put(argumentName, Converter.parseString(argument.getValue(), upnpType));
        }
        return outDic;
    } else {
        UPnPStatus controlStatus = act.getControlStatus();
        throw new UPnPException(controlStatus.getCode(), controlStatus.getDescription());
    }
}
Also used : Argument(org.cybergarage.upnp.Argument) UPnPStatus(org.cybergarage.upnp.UPnPStatus) UPnPStateVariable(org.osgi.service.upnp.UPnPStateVariable) ArgumentList(org.cybergarage.upnp.ArgumentList) Properties(java.util.Properties) UPnPException(org.osgi.service.upnp.UPnPException)

Example 5 with ArgumentList

use of org.cybergarage.upnp.ArgumentList in project felix by apache.

the class UPnPActionImpl method getInputArgumentNames.

/* (non-Javadoc)
	 * @see org.osgi.service.upnp.UPnPAction#getInputArgumentNames()
	 */
public String[] getInputArgumentNames() {
    // TODO to check
    ArgumentList argsList = act.getInputArgumentList();
    if (argsList.size() == 0) {
        return null;
    }
    String[] inputArgs = new String[argsList.size()];
    for (int i = 0; i < argsList.size(); i++) {
        inputArgs[i] = argsList.getArgument(i).getName();
    }
    return inputArgs;
}
Also used : ArgumentList(org.cybergarage.upnp.ArgumentList)

Aggregations

ArgumentList (org.cybergarage.upnp.ArgumentList)6 Argument (org.cybergarage.upnp.Argument)4 Properties (java.util.Properties)2 InvalidSyntaxException (org.osgi.framework.InvalidSyntaxException)2 UPnPAction (org.osgi.service.upnp.UPnPAction)2 UPnPException (org.osgi.service.upnp.UPnPException)2 UPnPService (org.osgi.service.upnp.UPnPService)2 UPnPStateVariable (org.osgi.service.upnp.UPnPStateVariable)2 Dictionary (java.util.Dictionary)1 Action (org.cybergarage.upnp.Action)1 AllowedValueList (org.cybergarage.upnp.AllowedValueList)1 AllowedValueRange (org.cybergarage.upnp.AllowedValueRange)1 ControlPoint (org.cybergarage.upnp.ControlPoint)1 Service (org.cybergarage.upnp.Service)1 StateVariable (org.cybergarage.upnp.StateVariable)1 UPnPStatus (org.cybergarage.upnp.UPnPStatus)1 UPnPDevice (org.osgi.service.upnp.UPnPDevice)1