public static <S> S clone(String localName, Class<S> clz, S s) { return clone(new JAXBElement<S>(new QName("", localName), clz, null, s)); }
private static <S> S unmarshall(InputStream is, Class<S> clz) throws Exception { Unmarshaller unmarshaller = getContext(clz).getUnmarshaller(); synchronized (unmarshaller) { JAXBElement<S> root = unmarshaller.unmarshal(new StreamSource(is), clz); return root.getValue(); } }
/** * It's unfortunate that's there's no clone already defined on JAXB * generated classes. Here we emulate that missing deep copy support * by marshalling and unmarshalling (a little heavyweight admittedly). * * @param <S> type parameter * @param object object to be cloned * @param clz type of that object * @return clone */ public static <S> S clone(JAXBElement<S> element) { S ret = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); marshall(baos, element); ret = unmarshall(new ByteArrayInputStream(baos.toString().getBytes()), element.getDeclaredType()); } catch (Exception e) { } return ret; }
private String addPath(UriBuilder uriBuilder, Link link) { String query = ""; String path = relative(link); // otherwise UriBuilder.build() will substitute {query} if (path.contains("?")) { query = path.substring(path.indexOf("?")); path = path.substring(0, path.indexOf("?")); } link = JAXBHelper.clone(OBJECT_FACTORY.createLink(link)); link.setHref(uriBuilder.clone().path(path).build() + query); return LinkHeader.format(link); }
private static <S> void marshall(OutputStream os, JAXBElement<S> element) throws Exception { Marshaller marshaller = getContext(element.getDeclaredType()).getMarshaller(); synchronized (marshaller) { marshaller.marshal(element, os); } }
private String addPath(UriBuilder uriBuilder, Link link) { String query = ""; String path = relative(link); // otherwise UriBuilder.build() will substitute {query} if (path.contains("?")) { query = path.substring(path.indexOf("?")); path = path.substring(0, path.indexOf("?") - 1); } link = JAXBHelper.clone(OBJECT_FACTORY.createLink(link)); link.setHref(uriBuilder.clone().path(path).build() + query); return LinkHeader.format(link); }
@Override public Disk addLinks(Disk disk) { disk = JAXBHelper.clone("disk", Disk.class, disk); return LinkHelper.addLinks(getUriInfo(), disk); }
public static VM addLinks(UriInfo uriInfo, PowerShellVM vm) { VM ret = JAXBHelper.clone("vm", VM.class, vm); String [] subCollections = { "cdroms", "disks", "nics", "snapshots", "tags", "statistics" }; ret.getLinks().clear(); for (String collection : subCollections) { addSubCollection(uriInfo, ret, collection); } return LinkHelper.addLinks(uriInfo, ret); }
public static Template addLinks(UriInfo uriInfo, PowerShellTemplate template) { Template ret = JAXBHelper.clone("template", Template.class, template); String [] deviceCollections = { "cdroms", "disks", "nics" }; ret.getLinks().clear(); for (String collection : deviceCollections) { Link link = new Link(); link.setRel(collection); link.setHref(LinkHelper.getUriBuilder(uriInfo, ret).path(collection).build().toString()); ret.getLinks().add(link); } return LinkHelper.addLinks(uriInfo, ret); }
public VM addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone("vm", VM.class, getModel())); }
public VmPool addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone("vmpool", VmPool.class, getModel())); }
public Template addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone("template", Template.class, getModel())); }
public HostNIC addLinks(PowerShellHostNIC nic) { nic = lookupBonds(nic); HostNIC ret = JAXBHelper.clone("host_nic", HostNIC.class, nic); return LinkHelper.addLinks(getUriInfo(), lookupNetworkId(ret)); }
public Host addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone(OBJECT_FACTORY.createHost(getModel()))); }
public Role addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone(OBJECT_FACTORY.createRole(getModel()))); }
public DataCenter addLinks() { DataCenter dataCenter = JAXBHelper.clone(OBJECT_FACTORY.createDataCenter(getModel())); return LinkHelper.addLinks(getUriInfo(), dataCenter); }
public Cluster addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone(OBJECT_FACTORY.createCluster(getModel()))); }
public User addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone(OBJECT_FACTORY.createUser(getModel()))); }
public Network addLinks() { return LinkHelper.addLinks(getUriInfo(), JAXBHelper.clone(OBJECT_FACTORY.createNetwork(getModel()))); }
public StorageDomain addLinks(UriInfo uriInfo, StorageDomain storageDomain) { storageDomain = JAXBHelper.clone("storage_domain", StorageDomain.class, storageDomain); storageDomain.setDataCenter(new DataCenter()); storageDomain.getDataCenter().setId(dataCenterId); return LinkHelper.addLinks(uriInfo, storageDomain); }