public void changePropertyType()

in eclipse/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/ModifiableProperties.java [246:325]


    public void changePropertyType(String key, int propertyType) {
        Attribute a = domElement.getAttribute(key);
        String value = a.getValue();
        
        // when changing the property type, the value needs to be adjusted
        // to make up a valid property
        // a simple approach is to create default values if a conversion
        // of the existing value is not possible/feasible.
        switch(propertyType) {
        case PropertyType.BINARY: {
            value = "";
            break;
        }
        case PropertyType.BOOLEAN: {
            try{
                value = String.valueOf(Boolean.parseBoolean(value));
            } catch(Exception e) {
                // hardcode to false then
                value = "false";
            }
            break;
        }
        case PropertyType.DATE: {
            try{
                value = DateTimeSupport.print(DateTimeSupport.parseAsCalendar(value));
            } catch(Exception e) {
                value = DateTimeSupport.print(Calendar.getInstance());
            }
            break;
        }
        case PropertyType.DECIMAL: {
            try{
                Float f = Float.parseFloat(value);
                value = String.valueOf(f);
            } catch(Exception e) {
                value = "0.0";
            }
            break;
        }
        case PropertyType.DOUBLE: {
            try{
                Double d = Double.parseDouble(value);
                value = String.valueOf(d);
            } catch(Exception e) {
                value = "0.0";
            }
            break;
        }
        case PropertyType.LONG: {
            try{
                value = String.valueOf(Long.parseLong(value));
            } catch(Exception e) {
                value = "0";
            }
            break;
        }
        case PropertyType.NAME:
        case PropertyType.STRING: {
            // no conversion needed, already converted
            break;
        }
        case PropertyType.PATH: 
        case PropertyType.URI:
        case PropertyType.REFERENCE:
        case PropertyType.WEAKREFERENCE: {
            //TODO validation would be necessary but not implemented atm
            // no conversion needed, already converted
            break;
        }
        }
        if (value.startsWith("{") && value.contains("}")) {
            int index = value.indexOf("}");
            value = value.substring(index+1);
        }
        if (propertyType!=PropertyType.STRING) {
            value = "{" + PropertyType.nameFromValue(propertyType)+"}"+value;
        }
        a.setValue(value);
        genericJcrRootFile.save();
    }