Skip to content

Instantly share code, notes, and snippets.

@saranicole
Created July 15, 2014 14:04
Show Gist options
  • Select an option

  • Save saranicole/3d700307d696f6ac451f to your computer and use it in GitHub Desktop.

Select an option

Save saranicole/3d700307d696f6ac451f to your computer and use it in GitHub Desktop.
Serialize
import net.sf.json.JSONObject
import net.sf.json.JSONArray
import static com.axeda.sdk.v2.dsl.Bridges.*
import com.axeda.services.v2.Asset
import com.axeda.services.v2.AssetCriteria
import com.axeda.services.v2.Model
import groovy.json.JsonBuilder
import com.axeda.drm.sdk.Context
import com.axeda.drm.sdk.device.Device
import com.axeda.drm.sdk.device.DeviceFinder
import com.axeda.common.sdk.id.Identifier
import groovy.xml.MarkupBuilder
import com.axeda.platform.sdk.v1.services.ServiceFactory
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObjectSearchCriteria
import com.axeda.platform.sdk.v1.services.extobject.PropertySearchCriteria
import com.axeda.platform.sdk.v1.services.extobject.expression.PropertyExpressionFactory
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObject
import com.axeda.platform.sdk.v1.services.extobject.Property
import com.axeda.drm.sdk.Context
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObjectService
import com.axeda.platform.sdk.v1.services.extobject.PropertyType
import com.axeda.platform.sdk.v1.services.extobject.PropertyDataType
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObjectType
import com.axeda.platform.sdk.v1.services.extobject.ExtendedObjectTypeSearchCriteria
import com.axeda.services.v2.ExternalCredentialCriteria
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*
import groovy.util.XmlSlurper
import com.axeda.services.v2.ExtendedMap
import static com.axeda.sdk.v2.dsl.Bridges.*
import com.axeda.drm.sdk.privilege.PrivilegeFinder
import com.axeda.drm.sdk.user.User
import com.axeda.drm.sdk.user.UserFinder
import com.axeda.drm.sdk.user.UserGroup
import com.axeda.drm.sdk.user.UserGroupFinder
import groovy.xml.XmlUtil
import com.axeda.services.v2.ExtendedMapCriteria
import net.sf.json.*
import groovy.json.JsonSlurper
import com.axeda.services.v2.NamedValue
import com.axeda.drm.sdk.scripto.Request
import com.axeda.drm.sdk.data.CurrentDataFinder
import com.axeda.drm.sdk.rules.engine.ExpressionRule
import com.axeda.drm.sdk.rules.engine.ExpressionRuleFinder
import groovy.util.Eval
import java.net.URLEncoder
import java.net.URLDecoder
def response
final def CONTEXT = Context.getSDKContext()
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
try {
DeviceFinder dfinder = new DeviceFinder(CONTEXT, new Identifier("19541" as Long))
Device device = dfinder.find()
/*
CurrentDataFinder currentDataFinder = new CurrentDataFinder(CONTEXT, device)
def thresholdDataValue = currentDataFinder.find("freespaces")
logger.info(objectDeepDump(thresholdDataValue))
Model model = modelBridge.findById("1486")
Asset asset = assetBridge.findById("19541")
def rule = setPropertiesFromMap(new ExpressionRule(CONTEXT), [
name: "TestExpressionRule",
description: "TestDesc",
triggername: "Data"
])
ExpressionRuleFinder erf = new ExpressionRuleFinder(CONTEXT)
erf.setName("TestExpression*")
def rules = erf.findAll()
logger.info(rules.size())
def map
builder = new JsonBuilder()
*/
//logger.info(device.device)
map = objectDeepDump(device)
// def eo = fetchEOCAPP_ById("3024", "com.axeda.services.v2.CustomApp")
// logger.info(eo.dump())
logger.info(map)
logger.info(map.context.getAt(0))
// def newmap = deserialize(map)
// logger.info(newmap)
// throws an error with v1 SDK device
/*
map = JSONArray.fromObject(asset).toString(2)
response = map
map = objectDeepDump(eo)
builder(map)
response = builder.toPrettyString()
*/
}
catch(ex){ xml.Response() {
Fault {
Code('Groovy Exception')
Message(ex.getMessage())
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
Detail(sw.toString())
}
}
logger.info(writer.toString())
}
return ["Content-Type": "application/json", "Content": response]
def setPropertiesFromMap(Object object, Map map){
map.each { k,v ->
def method = object.class.methods.find{ it.name ==~ /(?i)set${k}/ }
object.invokeMethod(method.name, v)
}
object
}
def objectToMap(object){
def str = object.toString()
def newstr = str.substring(str.indexOf("[") + 1,str.lastIndexOf("]"))
def result = newstr.split(',').inject([:]) { map, token ->
token.split('=').with { map[it[0]] = it[1] }
map
}
result
}
def objectDeepDump(object){
def str = object?.dump()
if (str){
def newstr = str.substring(str.indexOf(" ")+1,str.lastIndexOf(">"))
def result = newstr.tokenize(" ").inject([:]) { map, token ->
token.tokenize('=').with {
if ((it[1]?.contains("@") && object.hasProperty(it[0]))){
def collection = object[it[0]]
if (!(collection.hasProperty("size"))){
collection = [collection]
}
return map[it[0]] = collection.collect{ tuple ->
objectDeepDump(tuple)
}
}
else {
return map[it[0]] = it[1]
}
}
map
}
result
}
}
def fetchEOCAPP_ById(id, classname){
def extendedObjectService = new ServiceFactory().getExtendedObjectService()
def criteria = new ExtendedObjectSearchCriteria()
criteria.extendedObjectClassName = classname
criteria.internalObjectId = id as Long
def queryResult = extendedObjectService.findExtendedObjects(criteria, -1, -1, null)
return queryResult.size() == 0? null: queryResult.get(0)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment