/* * "Copyright (c) 2010-11 The Regents of the University of California. * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * * Author: Jorge Ortiz (jortiz@cs.berkeley.edu) * IS4 release version 1.0 */ package local.rest.resources.util; import local.rest.*; import local.rest.resources.*; import local.db.*; import java.util.logging.Logger; import java.util.logging.Level; import java.util.Vector; import net.sf.json.*; public class ResourceUtils { private static transient Logger logger = Logger.getLogger(ResourceUtils.class.getPackage().getName()); protected static MySqlDriver database = (MySqlDriver) DBAbstractionLayer.database; private ResourceUtils(){} //resource type strings public static final String DEFAULT_RSRC_STR = "DEFAULT"; public static final String DEVICES_RSRC_STR = "DEVICES"; public static final String DEVICE_RSRC_STR = "DEVICE"; public static final String PUBLISHER_RSRC_STR = "PUBLISHER"; public static final String GENERIC_PUBLISHER_RSRC_STR ="GENERIC_PUBLISHER"; public static final String SUBSCRIPTION_RSRC_STR = "SUBSCRIPTION"; public static final String SYMLINK_RSRC_STR = "SYMLINK"; public static final String MODEL_RSRC_STR = "MODEL"; public static final String MODEL_INSTANCE_RSRC_STR = "MODEL_INSTANCE"; public static final String MODEL_GENERIC_PUBLISHER_RSRC_STR ="MODEL_GENERIC_PUBLISHER"; //resource type ints public static final int DEFAULT_RSRC = 0; public static final int DEVICES_RSRC = 2; public static final int DEVICE_RSRC = 3; public static final int PUBLISHER_RSRC = 4; public static final int GENERIC_PUBLISHER_RSRC = 5; public static final int SUBSCRIPTION_RSRC = 6; public static final int SYMLINK_RSRC = 7; public static final int MODEL_RSRC = 8; public static final int MODEL_INSTANCE_RSRC = 9; public static final int MODEL_GENERIC_PUBLISHER_RSRC = 10; //methods public static boolean isValidType(String type){ int testType = translateType(type); switch(testType){ case DEFAULT_RSRC: return true; case DEVICES_RSRC: return true; case DEVICE_RSRC: return true; case PUBLISHER_RSRC: return true; case GENERIC_PUBLISHER_RSRC: return true; case SUBSCRIPTION_RSRC: return true; case SYMLINK_RSRC: return true; case MODEL_RSRC: return true; case MODEL_INSTANCE_RSRC: return true; case MODEL_GENERIC_PUBLISHER_RSRC: return true; default: return false; } } public static int translateType(String type){ if(type != null){ if(type.equalsIgnoreCase(DEFAULT_RSRC_STR)) return DEFAULT_RSRC; else if(type.equalsIgnoreCase(DEVICES_RSRC_STR)) return DEVICES_RSRC; else if(type.equalsIgnoreCase(DEVICE_RSRC_STR)) return DEVICE_RSRC; else if(type.equalsIgnoreCase(PUBLISHER_RSRC_STR)) return PUBLISHER_RSRC; else if(type.equalsIgnoreCase(GENERIC_PUBLISHER_RSRC_STR)) return GENERIC_PUBLISHER_RSRC; else if(type.equalsIgnoreCase(SUBSCRIPTION_RSRC_STR)) return SUBSCRIPTION_RSRC; else if(type.equalsIgnoreCase(SYMLINK_RSRC_STR)) return SYMLINK_RSRC; else if(type.equalsIgnoreCase(MODEL_RSRC_STR)) return MODEL_RSRC; else if(type.equalsIgnoreCase(MODEL_INSTANCE_RSRC_STR)) return MODEL_INSTANCE_RSRC; else if(type.equalsIgnoreCase(MODEL_GENERIC_PUBLISHER_RSRC_STR)) return MODEL_GENERIC_PUBLISHER_RSRC; } return -1; } public static String translateType(int type){ switch(type){ case DEFAULT_RSRC: return DEFAULT_RSRC_STR; case DEVICE_RSRC: return DEVICE_RSRC_STR; case DEVICES_RSRC: return DEVICES_RSRC_STR; case PUBLISHER_RSRC: return PUBLISHER_RSRC_STR; case GENERIC_PUBLISHER_RSRC: return GENERIC_PUBLISHER_RSRC_STR; case SUBSCRIPTION_RSRC: return SUBSCRIPTION_RSRC_STR; case SYMLINK_RSRC: return SYMLINK_RSRC_STR; case MODEL_RSRC: return MODEL_RSRC_STR; case MODEL_INSTANCE_RSRC: return MODEL_INSTANCE_RSRC_STR; case MODEL_GENERIC_PUBLISHER_RSRC: return MODEL_GENERIC_PUBLISHER_RSRC_STR; default: return null; } } public static boolean putResource(String parentPath, JSONObject rsrcAddReq){ String myPath = parentPath; if(!myPath.endsWith("/")) myPath += "/"; try { String rType = rsrcAddReq.getString("resourceType"); if(isValidType(rType)){ String rName = rsrcAddReq.optString("resourceName"); if(rType.equalsIgnoreCase(DEVICES_RSRC_STR)) rName = "devices"; Resource resource = null; JSONArray children = database.rrGetChildren(myPath); if(children != null && !rName.equals("") && !children.contains(rName)){ if(rType.equalsIgnoreCase(DEFAULT_RSRC_STR)){ resource = new Resource(myPath + rName); } else if (rType.equalsIgnoreCase(DEVICES_RSRC_STR)){ resource = new DevicesResource(myPath + rName); } else if (rType.equalsIgnoreCase(DEVICE_RSRC_STR)){ logger.info("CREATEING DEVICE INSTANCE RESOURCE"); resource = new DeviceInstanceResource(myPath + rName); } } if(resource != null) { RESTServer.addResource(resource); /*if(resource instanceof DeviceInstanceResource){ // this failed during instantiation, so we have to added it again. database.addDeviceEntry(rName, myPath + rName, null); }*/ return true; } } } catch(Exception e){ logger.log(Level.WARNING, "Error adding new resource to " + parentPath, e); } return false; } public static boolean devNameIsUnique(String parentResource, String childName){ logger.info("folder: " + parentResource + ", name: " + childName); JSONArray myChildren = database.rrGetChildren(parentResource); Vector<String> myChildrenVec = new Vector<String>(myChildren); return !myChildrenVec.contains(childName); } }