Skip to content

Commit 2d70f0b

Browse files
committed
Modify validatePatches to take optional lsinventory result file path
Former-commit-id: 75ad70c123d875afbc68da6b6416f3d725c20d29
1 parent 89ce04d commit 2d70f0b

File tree

3 files changed

+74
-7
lines changed

3 files changed

+74
-7
lines changed

src/main/java/com/oracle/weblogicx/imagebuilder/builder/util/ARUConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public final class ARUConstants {
1414
static final String PATCH_SEARCH_URL="https://updates.oracle"
1515
+ ".com/Orion/Services/search?product=%s&bug=%s&release=%s";
1616
static final String CONFLICTCHECKER_URL = "https://updates.oracle.com/Orion/Services/conflict_checks";
17+
static final String GET_LSINVENTORY_URL = "https://updates.oracle.com/Orion/Services/get_inventory_upi";
1718
static final String WLS_PROD_ID = "15991";
1819
static final String FMW_PROD_ID = "27638";
1920
public static final String CACHE_DIR_KEY = "cache.dir";

src/main/java/com/oracle/weblogicx/imagebuilder/builder/util/ARUUtil.java

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
package com.oracle.weblogicx.imagebuilder.builder.util;
44

55
import java.io.File;
6+
import java.io.FileDescriptor;
7+
import java.io.FileInputStream;
68
import java.io.IOException;
9+
import java.nio.file.Files;
10+
import java.nio.file.Paths;
711
import java.util.ArrayList;
812
import java.util.List;
913

@@ -16,6 +20,7 @@
1620
import org.apache.http.client.HttpResponseException;
1721
import org.w3c.dom.Document;
1822
import org.w3c.dom.Element;
23+
import org.w3c.dom.NamedNodeMap;
1924
import org.w3c.dom.Node;
2025
import org.w3c.dom.NodeList;
2126

@@ -24,6 +29,7 @@
2429
import static com.oracle.weblogicx.imagebuilder.builder.api.meta.MetaDataResolver.CACHE_KEY_SEPARATOR;
2530
import static com.oracle.weblogicx.imagebuilder.builder.util.ARUConstants.CONFLICTCHECKER_URL;
2631
import static com.oracle.weblogicx.imagebuilder.builder.util.ARUConstants.FMW_PROD_ID;
32+
import static com.oracle.weblogicx.imagebuilder.builder.util.ARUConstants.GET_LSINVENTORY_URL;
2733
import static com.oracle.weblogicx.imagebuilder.builder.util.ARUConstants.LATEST_PSU_URL;
2834
import static com.oracle.weblogicx.imagebuilder.builder.util.ARUConstants.PATCH_SEARCH_URL;
2935
import static com.oracle.weblogicx.imagebuilder.builder.util.ARUConstants.REL_URL;
@@ -158,6 +164,7 @@ public static List<String> getPatchesFor(String category, String version, List<S
158164

159165
/** Validate patches conflicts by passing a list of patches
160166
*
167+
* @param lsInventoryPath opatch lsinventory result path (null if non is passed)
161168
* @param patches A list of patches number
162169
* @param category wls or fmw
163170
* @param version version of the prduct
@@ -167,18 +174,58 @@ public static List<String> getPatchesFor(String category, String version, List<S
167174
* @throws IOException when failed to access the aru api
168175
*/
169176

170-
public static ValidationResult validatePatches(List<String> patches, String category, String version, String userId, String
171-
password) throws IOException {
177+
public static ValidationResult validatePatches(String lsInventoryPath, List<String> patches, String category,
178+
String version, String userId, String password) throws IOException {
172179

173180

174181
ValidationResult validationResult = new ValidationResult();
175182
validationResult.setSuccess(true);
176183
validationResult.setResults(null);
177184

178-
StringBuffer payload = new StringBuffer
179-
("<conflict_check_request><platform>2000</platform><target_patch_list/>");
180185
String releaseNumber = getReleaseNumber(category, version, userId, password);
181186

187+
StringBuffer payload = new StringBuffer
188+
("<conflict_check_request><platform>2000</platform>");
189+
190+
if (lsInventoryPath != null ) {
191+
String inventoryContent = new String(Files.readAllBytes(Paths.get(lsInventoryPath)));
192+
String upiPayload = "<inventory_upi_request><lsinventory_output>" + inventoryContent +
193+
"</lsinventory_output></inventory_upi_request>";
194+
195+
// System.out.println(upiPayload);
196+
Document upiResult = HttpUtil.postCheckConflictRequest(GET_LSINVENTORY_URL, upiPayload, userId,
197+
password);
198+
199+
XPathUtil.prettyPrint(upiResult);
200+
201+
try {
202+
NodeList upi_list = XPathUtil.applyXPathReturnNodeList(upiResult,
203+
"/inventory_upi_response/upi");
204+
if (upi_list.getLength() > 0) {
205+
payload.append("<target_patch_list>");
206+
207+
for ( int ii=0; ii < upi_list.getLength(); ii++) {
208+
Node upi = upi_list.item(ii);
209+
NamedNodeMap m = upi.getAttributes();
210+
payload.append(String.format("<installed_patch upi=\"%s\"/>",
211+
m.getNamedItem("number").getNodeValue()));
212+
213+
}
214+
payload.append("</target_patch_list>");
215+
}
216+
else {
217+
payload.append("<target_patch_list/>");
218+
}
219+
} catch(XPathExpressionException xpe) {
220+
throw new IOException(xpe);
221+
222+
}
223+
224+
} else {
225+
payload.append("<target_patch_list/>");
226+
}
227+
228+
182229
for (String patch : patches) {
183230
payload.append(String.format("<candidate_patch_list rel_id=\"%s\">%s</conflict_check_request>",
184231
releaseNumber, patch));
@@ -429,5 +476,20 @@ public static boolean checkCredentials(String username, String password) {
429476
return true;
430477
}
431478

479+
public static void main(String args[]) throws Exception {
480+
481+
// public static ValidationResult validatePatches(String lsInventoryPath, List<String> patches, String category,
482+
// String version, String userId, String password) throws IOException {
483+
484+
List<String> patches = new ArrayList<String>();
485+
patches.add("26261906");
486+
487+
ARUUtil.validatePatches("/home/johnny/Downloads//conflict-demo/myinv.txt", null, null, null, "johnny"
488+
489+
"iJCPiUah7jdmLk1E");
490+
// ARUUtil.validatePatches(null, patches, null, null, "johnny"
491+
492+
// "iJCPiUah7jdmLk1E");
493+
}
432494
}
433495

src/main/java/com/oracle/weblogicx/imagebuilder/builder/util/HttpUtil.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,15 @@ public static Document postCheckConflictRequest(String url, String payload, Stri
132132
httpExecutor.use(cookieStore);
133133

134134
// Has to do search first, otherwise results in 302
135-
getXMLContent(REL_URL, username, password);
135+
// MUST use the same httpExecutor to maintain session
136+
137+
138+
httpExecutor
139+
.execute(Request.Get(REL_URL).connectTimeout(30000).socketTimeout(30000))
140+
.returnContent().asString();
136141

137142
HttpEntity entity = MultipartEntityBuilder.create().setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
138-
.addPart(FormBodyPartBuilder.create("request_xml", new StringBody(payload, ContentType.TEXT_PLAIN)).build())
143+
.addTextBody("request_xml", payload)
139144
.build();
140145

141146
String xmlString =
@@ -159,5 +164,4 @@ public static Document postCheckConflictRequest(String url, String payload, Stri
159164

160165
}
161166

162-
163167
}

0 commit comments

Comments
 (0)