private Map<String,String> loadLayerPatches(boolean addons) { Map<String,String> result = Collections.emptyMap(); final Patch patch = getMetadata(); if(patch != null) { result = new HashMap<String, String>(); for (PatchElement e : patch.getElements()) { if (e.getProvider().isAddOn() == addons) { result.put(e.getProvider().getName(), e.getId()); } } } return result; }
final Map<String, List<PatchElement>> addonPatches = new HashMap<String, List<PatchElement>>(elements.size()); for(PatchElement e : elements) { if(e.getProvider().isAddOn()) { addonPatches.put(e.getProvider().getName(), Collections.<PatchElement>emptyList()); } else { layerPatches.put(e.getProvider().getName(), Collections.<PatchElement>emptyList()); for(PatchElement oneOffElement : oneOff.getElements()) { final Map<String, List<PatchElement>> providerPatches; if(oneOffElement.getProvider().isAddOn()) { providerPatches = addonPatches; } else { providerPatches = layerPatches; List<PatchElement> patches = providerPatches.get(oneOffElement.getProvider().getName()); if(patches != null) { switch(patches.size()) { case 0: providerPatches.put(oneOffElement.getProvider().getName(), Collections.singletonList(oneOffElement)); break; case 1: patches = new ArrayList<PatchElement>(patches); providerPatches.put(oneOffElement.getProvider().getName(), patches); default: patches.add(oneOffElement); for(PatchElement e : elements) { final List<PatchElement> patches; if(e.getProvider().isAddOn()) {
/** * Create a patch element for the rollback patch. * * @param entry the entry * @return the new patch element */ protected static PatchElement createRollbackElement(final PatchEntry entry) { final PatchElement patchElement = entry.element; final String patchId; final Patch.PatchType patchType = patchElement.getProvider().getPatchType(); if (patchType == Patch.PatchType.CUMULATIVE) { patchId = entry.getCumulativePatchID(); } else { patchId = patchElement.getId(); } return createPatchElement(entry, patchId, entry.rollbackActions); }
assert state == State.NEW; final PatchElementProvider provider = element.getProvider(); final String layerName = provider.getName(); final LayerType layerType = provider.getLayerType();
for (final PatchElement patchElement : originalPatch.getElements()) { final PatchElementProvider provider = patchElement.getProvider(); final String layerName = provider.getName(); final LayerType layerType = provider.getLayerType(); final Map<String, PatchElement> originals; switch (layerType) { final String elementPatchId = patchElement.getId(); final PatchElementProvider provider = patchElement.getProvider(); final String layerName = provider.getName(); final LayerType layerType = provider.getLayerType(); final LinkedHashMap<String, PatchElement> originals; switch (layerType) { final Patch.PatchType elementPatchType = provider.getPatchType(); final PatchableTarget.TargetInfo info; if (layerType == LayerType.AddOn) {
for (PatchElement pe : cp2.getElements()) { final PatchElementProvider provider = pe.getProvider(); assertUpgrade(provider.getPatchType()); if (provider.isAddOn()) { cp2AddonElements.put(provider.getName(), pe); } else { cp2LayerElements.put(provider.getName(), pe); assertUpgrade(provider.getPatchType()); final PatchElement cp2El; if (provider.isAddOn()) { cp2El = cp2AddonElements.remove(provider.getName()); } else { cp2El = cp2LayerElements.remove(provider.getName()); builder.addElement(cp1El); } else { final PatchElementBuilder elementBuilder = builder.upgradeElement(cp2El.getId(), provider.getName(), provider.isAddOn()).setDescription(cp2El.getDescription());
final Patch.PatchType elementPatchType = provider.getPatchType(); if (elementPatchType == Patch.PatchType.CUMULATIVE) { writer.writeStartElement(Element.UPGRADE.name); writer.writeAttribute(Attribute.NAME.name, provider.getName()); if (provider.isAddOn()) { writer.writeAttribute(Attribute.ADD_ON.name, "true"); if(!provider.getRequires().isEmpty()) { writer.writeStartElement(Element.REQUIRES.name); for(String elementId : provider.getRequires()) { writer.writeStartElement(Element.PATCH.name); writer.writeAttribute(Attribute.ID.name, elementId);
@Override File getSourceFile(ContentItem item) throws IOException { if (item.getContentType() == ContentType.BUNDLE) { final File root = new File(bundles, base); final File layer = new File(root, element.getProvider().getName()); return PatchContentLoader.getModulePath(layer, (ModuleItem) item); } else if (item.getContentType() == ContentType.MODULE) { final File root = new File(modules, base); final File layer = new File(root, element.getProvider().getName()); return PatchContentLoader.getModulePath(layer, (ModuleItem) item); } throw processingError("invalid content item for patch-element %s", item); }
final String base = element.getProvider().isAddOn() ? Constants.DEFAULT_ADD_ONS_PATH : Constants.DEFAULT_LAYERS_PATH;
for (final PatchElement patchElement : originalPatch.getElements()) { final PatchElementProvider provider = patchElement.getProvider(); final String layerName = provider.getName(); final LayerType layerType = provider.getLayerType(); final Map<String, PatchElement> originals; switch (layerType) { final String elementPatchId = patchElement.getId(); final PatchElementProvider provider = patchElement.getProvider(); final String layerName = provider.getName(); final LayerType layerType = provider.getLayerType(); final LinkedHashMap<String, PatchElement> originals; switch (layerType) { final Patch.PatchType elementPatchType = provider.getPatchType(); final PatchableTarget.TargetInfo info; if (layerType == LayerType.AddOn) {
for (PatchElement pe : cp2.getElements()) { final PatchElementProvider provider = pe.getProvider(); assertUpgrade(provider.getPatchType()); if (provider.isAddOn()) { cp2AddonElements.put(provider.getName(), pe); } else { cp2LayerElements.put(provider.getName(), pe); assertUpgrade(provider.getPatchType()); final PatchElement cp2El; if (provider.isAddOn()) { cp2El = cp2AddonElements.remove(provider.getName()); } else { cp2El = cp2LayerElements.remove(provider.getName()); builder.addElement(cp1El); } else { final PatchElementBuilder elementBuilder = builder.upgradeElement(cp2El.getId(), provider.getName(), provider.isAddOn()).setDescription(cp2El.getDescription());
final Patch.PatchType elementPatchType = provider.getPatchType(); if (elementPatchType == Patch.PatchType.CUMULATIVE) { writer.writeStartElement(Element.UPGRADE.name); writer.writeAttribute(Attribute.NAME.name, provider.getName()); if (provider.isAddOn()) { writer.writeAttribute(Attribute.ADD_ON.name, "true"); if(!provider.getRequires().isEmpty()) { writer.writeStartElement(Element.REQUIRES.name); for(String elementId : provider.getRequires()) { writer.writeStartElement(Element.PATCH.name); writer.writeAttribute(Attribute.ID.name, elementId);
assert state == State.NEW; final PatchElementProvider provider = element.getProvider(); final String layerName = provider.getName(); final LayerType layerType = provider.getLayerType();
private Map<String,String> loadLayerPatches(boolean addons) { Map<String,String> result = Collections.emptyMap(); final Patch patch = getMetadata(); if(patch != null) { result = new HashMap<String, String>(); for (PatchElement e : patch.getElements()) { if (e.getProvider().isAddOn() == addons) { result.put(e.getProvider().getName(), e.getId()); } } } return result; }
@Test public void testAddRemove() throws Exception { final Patch cp1 = generateCP("base", "cp1", ModificationType.ADD); final Patch cp2 = generateCP("cp1", "cp2", ModificationType.REMOVE); final Patch merged = PatchMerger.merge(cp1, cp2); assertEquals("cp2", merged.getPatchId()); assertEquals("cp2" + " description", merged.getDescription()); final IdentityUpgrade identity = merged.getIdentity().forType(PatchType.CUMULATIVE, Identity.IdentityUpgrade.class); assertEquals("base", identity.getVersion()); assertEquals("cp2", identity.getResultingVersion()); assertEquals(PatchType.CUMULATIVE, identity.getPatchType()); final List<PatchElement> elements = merged.getElements(); assertEquals(1, elements.size()); final PatchElement e = elements.get(0); assertEquals("base-" + "cp2", e.getId()); final PatchElementProvider provider = e.getProvider(); assertEquals("base", provider.getName()); assertEquals(PatchType.CUMULATIVE, provider.getPatchType()); assertEquals(LayerType.Layer, provider.getLayerType()); //assertEquals(0, e.getModifications().size()); // for modules remove is effectively a modify which changes the module xml to indicate an absent module // so, it will remain an add of an absent module assertEquals(1, e.getModifications().size()); final ContentModification mod = e.getModifications().iterator().next(); assertEquals(ModificationType.ADD, mod.getType()); Assert.assertArrayEquals(PatchUtils.getAbsentModuleContentHash((ModuleItem) mod.getItem()), mod.getItem().getContentHash()); }
static void assertNotApplied(final Patch patch, InstallationManager manager) throws IOException { InstalledIdentity installedIdentity = null; try { installedIdentity = manager.getInstalledIdentity(patch.getIdentity().getName(), patch.getIdentity().getVersion()); } catch (PatchingException e) { Assert.fail(e.getLocalizedMessage()); } final PatchableTarget.TargetInfo identity = installedIdentity.getIdentity().loadTargetInfo(); assertNotApplied(patch.getIdentity().getPatchType(), patch.getPatchId(), identity); assertDoesNotExists(identity.getDirectoryStructure().getInstalledImage().getPatchHistoryDir(patch.getPatchId())); for (final PatchElement element : patch.getElements()) { final PatchElementProvider provider = element.getProvider(); final PatchableTarget target = provider.isAddOn() ? installedIdentity.getAddOn(provider.getName()) : installedIdentity.getLayer(provider.getName()); Assert.assertNotNull(target); assertNotApplied(provider.getPatchType(), element.getId(), target.loadTargetInfo()); } }
final Map<String, List<PatchElement>> addonPatches = new HashMap<String, List<PatchElement>>(elements.size()); for(PatchElement e : elements) { if(e.getProvider().isAddOn()) { addonPatches.put(e.getProvider().getName(), Collections.<PatchElement>emptyList()); } else { layerPatches.put(e.getProvider().getName(), Collections.<PatchElement>emptyList()); for(PatchElement oneOffElement : oneOff.getElements()) { final Map<String, List<PatchElement>> providerPatches; if(oneOffElement.getProvider().isAddOn()) { providerPatches = addonPatches; } else { providerPatches = layerPatches; List<PatchElement> patches = providerPatches.get(oneOffElement.getProvider().getName()); if(patches != null) { switch(patches.size()) { case 0: providerPatches.put(oneOffElement.getProvider().getName(), Collections.singletonList(oneOffElement)); break; case 1: patches = new ArrayList<PatchElement>(patches); providerPatches.put(oneOffElement.getProvider().getName(), patches); default: patches.add(oneOffElement); for(PatchElement e : elements) { final List<PatchElement> patches; if(e.getProvider().isAddOn()) {
/** * Create a patch element for the rollback patch. * * @param entry the entry * @return the new patch element */ protected static PatchElement createRollbackElement(final PatchEntry entry) { final PatchElement patchElement = entry.element; final String patchId; final Patch.PatchType patchType = patchElement.getProvider().getPatchType(); if (patchType == Patch.PatchType.CUMULATIVE) { patchId = entry.getCumulativePatchID(); } else { patchId = patchElement.getId(); } return createPatchElement(entry, patchId, entry.rollbackActions); }