/**
* SlingBeans - NetBeans Sling plugin
* https://github.com/jkan997/SlingBeans
* Licensed under Apache 2.0 license
* http://www.apache.org/licenses/LICENSE-2.0
*/
package org.jkan997.slingbeans.nbtree;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.jkan997.slingbeans.slingfs.FileObject;
import org.jkan997.slingbeans.slingfs.FileObjectAttribute;
import org.openide.nodes.Node;
/**
*
* @author jkan997
*/
public class SlingNodeProperty extends Node.Property {
public final static int ATTR_CREATED = 1;
public final static int ATTR_LAST_MODIFIED = 2;
public final static int ATTR_SIZE = 3;
private int specialAttr = -1;
private Object specialValue = null;
private String attrName;
private FileObject fileObject = null;
private Map<String, FileObjectAttribute> attributesMap;
public static Set<String> readOnlyProps = new TreeSet<String>();
static{
readOnlyProps.add("jcr:created");
readOnlyProps.add("jcr:createdBy");
}
public SlingNodeProperty(Class valueType) {
super(valueType);
}
@Override
public boolean canRead() {
return true;
}
@Override
public Object getValue() throws IllegalAccessException, InvocationTargetException {
if (specialValue != null) {
return specialValue;
}
if (attributesMap.containsKey(this.attrName)) {
FileObjectAttribute foa = attributesMap.get(this.attrName);
if (foa!=null){
return foa.getValue();
}
}
return null;
}
@Override
public boolean canWrite() {
if (specialAttr > 0) {
return false;
}
if (readOnlyProps.contains(attrName)){
return false;
}
FileObjectAttribute foa = attributesMap.get(this.attrName);
if ((foa != null) && (foa.isReadOnly())) {
return false;
}
return true;
}
@Override
public void setValue(Object value) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
try {
fileObject.setAttribute(attrName, value);
fileObject.saveAttributes();
} catch (Exception ex) {
throw new RuntimeException();
}
}
@Override
public String getDisplayName() {
return getName();
}
public String getAttrName() {
return attrName;
}
public void setAttrName(String attrName) {
this.attrName = attrName;
}
public void setFileObject(FileObject fileObject) {
this.fileObject = fileObject;
this.attributesMap = fileObject.getAttributesMap();
}
public void setSpecialAttr(int specialAttr, Object specialValue) {
this.specialAttr = specialAttr;
this.specialValue = specialValue;
}
}