1 /* 2 * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 /* 27 * @bug 6622366 28 */ 29 30 import com.sun.servicetag.*; 31 import java.io.*; 32 import java.util.*; 33 34 /** 35 * A utility class simulating stclient for testing purpose. 36 */ 37 public class SvcTagClient { 38 private static File xmlFile; 39 private static RegistrationData registration; 40 private static String instanceURN; 41 private static String productName; 42 private static String productVersion; 43 private static String productURN; 44 private static String productParent; 45 private static String productParentURN = ""; // optional 46 private static String productDefinedInstanceID = ""; //optional 47 private static String productVendor; 48 private static String platformArch; 49 private static String container; 50 private static String source; 51 52 // stclient exit value 53 private static final int ST_ERR_REC_NOT_FOUND = 225; 54 55 public static void main(String[] args) throws Exception { 56 String path = System.getProperty("stclient.registry.path"); 57 if (path == null) { 58 System.err.println("stclient registry path missing"); 59 System.exit(-1); 60 } 61 xmlFile = new File(path); 62 if (xmlFile.exists()) { 63 BufferedInputStream in = new BufferedInputStream(new FileInputStream(xmlFile)); 64 registration = RegistrationData.loadFromXML(in); 65 } else { 66 registration = new RegistrationData(); 67 } 68 boolean add = false; 69 boolean delete = false; 70 boolean update = false; 71 boolean get = false; 72 boolean find = false; 73 74 int count = 0; 75 while (count < args.length) { 76 String arg = args[count]; 77 if (!arg.startsWith("-")) { 78 System.err.println("Invalid option:" + arg); 79 System.exit(-1); 80 } 81 if (arg.equals("-a")) { 82 add = true; 83 } else if (arg.equals("-d")) { 84 delete = true; 85 } else if (arg.equals("-u")) { 86 update = true; 87 } else if (arg.equals("-g")) { 88 get = true; 89 } else if (arg.equals("-f")) { 90 find = true; 91 productURN = ""; 92 } else if (arg.equals("-t")) { 93 productURN = args[++count]; 94 } else if (arg.equals("-i")) { 95 instanceURN = args[++count]; 96 } else if (arg.equals("-p")) { 97 productName = args[++count]; 98 } else if (arg.equals("-e")) { 99 productVersion = args[++count]; 100 } else if (arg.equals("-t")) { 101 productURN = args[++count]; 102 } else if (arg.equals("-F")) { 103 productParentURN = args[++count]; 104 } else if (arg.equals("-P")) { 105 productParent = args[++count]; 106 } else if (arg.equals("-I")) { 107 productDefinedInstanceID = args[++count]; 108 } else if (arg.equals("-m")) { 109 productVendor = args[++count]; 110 } else if (arg.equals("-A")) { 111 platformArch = args[++count]; 112 } else if (arg.equals("-z")) { 113 container = args[++count]; 114 } else if (arg.equals("-S")) { 115 source = args[++count]; 116 } else { 117 System.err.println("Invalid option:" + arg); 118 System.exit(-1); 119 } 120 count++; 121 } 122 123 if (add) { 124 addServiceTag(); 125 } else if (delete) { 126 deleteServiceTag(); 127 } else if (update) { 128 updateServiceTag(); 129 } else if (get) { 130 getServiceTag(); 131 } else if (find) { 132 findServiceTags(); 133 } else { 134 System.err.println("Error"); 135 System.exit(-1); 136 } 137 updateXmlFile(); 138 } 139 private static String OUTPUT = "Product instance URN="; 140 141 private static void addServiceTag() { 142 if (instanceURN == null) { 143 instanceURN = ServiceTag.generateInstanceURN(); 144 } 145 ServiceTag st = ServiceTag.newInstance(instanceURN, 146 productName, 147 productVersion, 148 productURN, 149 productParent, 150 productParentURN, 151 productDefinedInstanceID, 152 productVendor, 153 platformArch, 154 container, 155 source); 156 registration.addServiceTag(st); 157 System.out.println(OUTPUT + st.getInstanceURN()); 158 } 159 160 private static void deleteServiceTag() { 161 registration.removeServiceTag(instanceURN); 162 System.out.println("instance_urn=" + instanceURN + " deleted"); 163 } 164 165 private static void updateServiceTag() { 166 registration.updateServiceTag(instanceURN, productDefinedInstanceID); 167 System.out.println("instance_urn=" + instanceURN + " updated"); 168 } 169 170 private static void getServiceTag() { 171 ServiceTag st = registration.getServiceTag(instanceURN); 172 if (st == null) { 173 System.err.println("instance_urn=" + instanceURN + " not found"); 174 System.exit(ST_ERR_REC_NOT_FOUND); 175 } else { 176 System.out.println(st); 177 } 178 } 179 180 private static void findServiceTags() { 181 Set<ServiceTag> set = registration.getServiceTags(); 182 for (ServiceTag st : set) { 183 if (st.getProductURN().equals(productURN)) { 184 System.out.println(st.getInstanceURN()); 185 } 186 } 187 if (set.size() == 0) { 188 System.out.println("No records found"); 189 System.exit(ST_ERR_REC_NOT_FOUND); 190 } 191 } 192 private static void updateXmlFile() throws IOException { 193 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(xmlFile)); 194 try { 195 registration.storeToXML(out); 196 } finally { 197 out.close(); 198 } 199 } 200 }