import com.thingworx.communications.client.ClientConfigurator; import com.thingworx.communications.client.ConnectedThingClient; import com.thingworx.communications.client.things.filetransfer.FileTransferVirtualThing; import com.thingworx.relationships.RelationshipTypes.ThingworxEntityTypes; import com.thingworx.types.InfoTable; import com.thingworx.types.collections.ValueCollection; import com.thingworx.types.primitives.BooleanPrimitive; import com.thingworx.types.primitives.StringPrimitive; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Calendar; import java.util.HashMap; import java.util.Properties; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; public class TransferSupportPackage { private static final Properties prop = new Properties(); private static Logger log = Logger.getLogger(TransferSupportPackage.class.getName()); public static void main(String[] args) { String fileName = args[0]; // Loading Logger Configuration will be removed in future submission. try { LoggerSetup.loadConfiguration(); } catch (IOException e) { log.log(Level.SEVERE, e.getMessage(), e); } loadProperties(); transferFile(fileName); } public static void loadProperties() { InputStream input = null; try { input = new FileInputStream("./Properties/edgesdk.properties"); // Load a properties file prop.load(input); } catch (IOException ex) { ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { log.log(Level.SEVERE, e.getMessage(), e); } } } } private static void transferFile(String fileName) { String ThingName = prop.getProperty("REMOTE_THING_FILE_TRANSFER"); // Create a client config ClientConfigurator config = new ClientConfigurator(); config.setUri(prop.getProperty("URI")); config.setAppKey(prop.getProperty("APP_KEY")); boolean isSSLEnabled = Boolean.getBoolean(prop.getProperty("SSL_ENABLED")); config.ignoreSSLErrors(!isSSLEnabled); if (isSSLEnabled) { System.setProperty("javax.net.ssl.trustStore", "./jre/lib/security/"); // Need to find out way to get certificate password from ThingWorx Server System.setProperty("javax.net.ssl.trustStorePassword", "thingworx"); } try { ConnectedThingClient client = new ConnectedThingClient(config); HashMap virtualDirectory = new HashMap(); String virtualId = (UUID.randomUUID()).toString(); virtualDirectory.put(virtualId, prop.getProperty("LOCAL_DIR")); FileTransferVirtualThing myThing = new FileTransferVirtualThing(ThingName, "IPA Connect", client, virtualDirectory); // Add virtual directories that will act as the root directories // in this // application's virtual file system. // myThing.addVirtualDirectory(); client.bindThing(myThing); client.start(); Thread.sleep(5000); ValueCollection parameters = new ValueCollection(); parameters.put("sourceRepo", new StringPrimitive(ThingName)); parameters.put("sourcePath", new StringPrimitive(virtualId)); parameters.put("sourceFile", new StringPrimitive(fileName)); parameters.put("targetRepo", new StringPrimitive("IPA_1")); parameters.put("targetPath", new StringPrimitive("/")); parameters.put("targetFile", new StringPrimitive(fileName)); log.info(virtualId + "virtualId"); log.info(fileName + "-File transfer Started at " + Calendar.getInstance().getTime()); InfoTable infoTable = client.invokeService((ThingworxEntityTypes.Subsystems), "FileTransferSubsystem", "Copy", parameters, 3600); BooleanPrimitive isTransferComplete = (BooleanPrimitive) infoTable.getFirstRow().getPrimitive("isComplete"); if (!isTransferComplete.getValue()) { String errorMessage = infoTable.getFirstRow().getStringValue("message"); log.log(Level.SEVERE, errorMessage); } else { log.info(fileName + "-File transfer Ends at " + Calendar.getInstance().getTime()); // deleteFile(prop.getProperty("LOCAL_DIR") + File.separator // + fileName); } client.shutdown(); } catch (Exception e) { log.log(Level.SEVERE, e.getMessage(), e); } } private static void deleteFile(String fileName) { File file = new File(fileName); if (file.delete()) { log.info(file.getName() + "-File is deleted."); } else { log.log(Level.SEVERE, "Delete operation is failed."); } } }