class PropertyDelegator extends BaseDelegator implements IPropertyDelegator {

    @Override
    public String setProperty(
            final String name,
            final String value,
            final PropertyOptions opts) throws P4JavaException {

        if (isBlank(name)) {
            if (opts == null || isBlank(opts.getName())) {
                throw new IllegalArgumentException("Property/option name shouldn't null or empty");
            }
        }
        if (isBlank(value)) {
            if (opts == null || isBlank(opts.getValue())) {
                throw new IllegalArgumentException("Property/option value shouldn't null or empty");
            }
        }
        PropertyOptions propertyOptions = opts;
        if (isNull(opts)) {
            propertyOptions = new PropertyOptions();
        }
        if (isNotBlank(name)) {
            propertyOptions.setName(name);
        }
        if (isNotBlank(value)) {
            propertyOptions.setValue(value);
        }

        List<Map<String, Object>> resultMaps = execMapCmdList(
                PROPERTY,
                processParameters(propertyOptions, null, new String[]{"-a"}, server), null);
        return parseCommandResultMapAsString(resultMaps);
    }

    public  PropertyDelegator(IOptionsServer server);

}