public ContentItem getContentItem() { return modification.getItem(); }
@Override ContentModification createRollbackEntry(ContentModification original, byte[] targetHash, byte[] itemHash) { final BundleItem item = new BundleItem(contentItem.getName(), contentItem.getSlot(), itemHash); switch (original.getType()) { case ADD: return new ContentModification(item, targetHash, ModificationType.REMOVE, original.getCondition()); case REMOVE: return new ContentModification(item, targetHash, ModificationType.ADD, original.getCondition()); default: return new ContentModification(item, targetHash, ModificationType.MODIFY, original.getCondition()); } }
protected ContentModification getOriginalModification(byte[] targetHash, byte[] itemHash) { final ContentModification original = super.getOriginalModification(targetHash, itemHash); final ModificationType type; if (Arrays.equals(NO_CONTENT, itemHash) && !backup.exists()) { type = ModificationType.ADD; } else { type = ModificationType.MODIFY; } return new ContentModification(original.getItem(), original.getTargetHash(), type, original.getCondition()); } }
public ContentModification(ContentItem item, ContentModification existing) { this(item, existing.getTargetHash(), existing.getType()); }
protected static void writeSlottedItem(final XMLExtendedStreamWriter writer, Element element, ContentModification modification) throws XMLStreamException { writer.writeEmptyElement(element.name); final ModuleItem item = (ModuleItem) modification.getItem(); final ModificationType type = modification.getType(); writer.writeAttribute(Attribute.NAME.name, item.getName()); if (!MAIN_SLOT.equals(item.getSlot())) { writer.writeAttribute(Attribute.SLOT.name, item.getSlot()); } byte[] hash = item.getContentHash(); if (hash.length > 0 && type != ModificationType.REMOVE) { writer.writeAttribute(Attribute.HASH.name, bytesToHexString(hash)); } if(type == ModificationType.REMOVE) { final byte[] existingHash = modification.getTargetHash(); if (existingHash.length > 0) { writer.writeAttribute(Attribute.HASH.name, bytesToHexString(existingHash)); } } else if(type == ModificationType.MODIFY) { final byte[] existingHash = modification.getTargetHash(); if (existingHash.length > 0) { writer.writeAttribute(Attribute.NEW_HASH.name, bytesToHexString(existingHash)); } } }
/** * Recursively copy modification items. * * @param modifications the modifications * @throws IOException */ protected void copyItems(final Collection<ContentModification> modifications) throws IOException { for (final ContentModification modification : modifications) { if (modification.getType() == ModificationType.REMOVE) { // Skip removals continue; } final ContentItem item = modification.getItem(); final File source = getSourceFile(item); final File target = getTargetFile(item); if (!source.exists()) { throw processingError("source item does not exist %s", source.getAbsolutePath()); } IoUtils.copyFile(source, target); } }
final MiscContentItem item = (MiscContentItem) modification.getItem(); final ModificationType type = modification.getType(); final ModificationCondition condition = modification.getCondition(); if(condition != null) { writer.writeAttribute(Attribute.CONDITION.name, condition.toString()); final byte[] existingHash = modification.getTargetHash(); if (existingHash.length > 0) { writer.writeAttribute(Attribute.HASH.name, bytesToHexString(existingHash)); writer.writeAttribute(Attribute.NEW_HASH.name, bytesToHexString(modification.getTargetHash())); if (item.isAffectsRuntime()) { writer.writeAttribute(Attribute.IN_RUNTIME_USE.name, "true");
originalModifications.put(new Location(modification.getItem()), modification); final ContentItem item = modification.getItem(); final byte[] currentContent = modification.getTargetHash(); final byte[] originalContent = original.getItem().getContentHash(); final byte[] originalTarget = original.getTargetHash();
static void assertContentModification(final String patchID, final PatchableTarget target, final ContentModification modification) { final ContentItem item = modification.getItem(); final ContentType contentType = item.getContentType(); switch (contentType) { case MISC: final File home = target.getDirectoryStructure().getInstalledImage().getJbossHome(); final ModificationCondition condition = modification.getCondition(); if(condition != null) { if(condition instanceof ModificationCondition.ExistsCondition) { assertMisc(home, modification.getType(), (MiscContentItem) item); break; default:
protected ContentModification createContentModification(final ContentItem item, final ModificationType type, final byte[] existingHash, ModificationCondition condition) { return new ContentModification(item, existingHash, type, condition); }
@Override protected ContentModification getOriginalModification(byte[] targetHash, byte[] itemHash) { final ModuleItem original = getContentItem(); final ModuleItem item = new ModuleItem(original.getName(), original.getSlot(), targetHash); return new ContentModification(item, description.getModification().getTargetHash(), ModificationType.MODIFY, description.getModification().getCondition()); }
@Override ContentModification createRollbackEntry(ContentModification original, byte[] targetHash, byte[] itemHash) { final ModuleItem item = createContentItem(contentItem, itemHash); return new ContentModification(item, targetHash, ModificationType.MODIFY, original.getCondition()); } }
public byte[] getTargetHash() { return modification.getTargetHash(); }
public ModificationType getModificationType() { return modification.getType(); }
@Override public boolean isRelevant(PatchingTaskContext context) throws PatchingException { final ModificationCondition condition = description.getModification().getCondition(); if(condition == null) { return true; } return condition.isSatisfied(context); }
protected static void writeSlottedItem(final XMLExtendedStreamWriter writer, Element element, ContentModification modification) throws XMLStreamException { writer.writeEmptyElement(element.name); final ModuleItem item = (ModuleItem) modification.getItem(); final ModificationType type = modification.getType(); writer.writeAttribute(Attribute.NAME.name, item.getName()); if (!MAIN_SLOT.equals(item.getSlot())) { writer.writeAttribute(Attribute.SLOT.name, item.getSlot()); } byte[] hash = item.getContentHash(); if (hash.length > 0 && type != ModificationType.REMOVE) { writer.writeAttribute(Attribute.HASH.name, bytesToHexString(hash)); } if(type == ModificationType.REMOVE) { final byte[] existingHash = modification.getTargetHash(); if (existingHash.length > 0) { writer.writeAttribute(Attribute.HASH.name, bytesToHexString(existingHash)); } } else if(type == ModificationType.MODIFY) { final byte[] existingHash = modification.getTargetHash(); if (existingHash.length > 0) { writer.writeAttribute(Attribute.NEW_HASH.name, bytesToHexString(existingHash)); } } }
private static void copyModificationContent(final File srcPatchDir, final String srcElementId, final File targetPatchDir, final String targetElementId, final ContentModification mod) throws PatchingException { final ModificationType type = mod.getType(); if(type.equals(ModificationType.REMOVE)) { return; final ContentType contentType = mod.getItem().getContentType(); if(ContentType.MISC.equals(contentType)) { modSrcDir = new File(modSrcDir, Constants.MISC); modTrgDir = new File(modTrgDir, Constants.MISC); for (final String path : ((MiscContentItem)mod.getItem()).getPath()) { modSrcDir = new File(modSrcDir, path); modTrgDir = new File(modTrgDir, path); modSrcDir = new File(modSrcDir, Constants.MODULES); modTrgDir = new File(modTrgDir, Constants.MODULES); slot = ((ModuleItem)mod.getItem()).getSlot(); } else if (contentType.equals(ContentType.BUNDLE)) { modSrcDir = new File(modSrcDir, Constants.BUNDLES); modTrgDir = new File(modTrgDir, Constants.BUNDLES); slot = ((BundleItem)mod.getItem()).getSlot(); } else { throw new PatchingException("Unexpected content type " + contentType); for (String name : mod.getItem().getName().split("\\.")) { modSrcDir = new File(modSrcDir, name); modTrgDir = new File(modTrgDir, name);
final MiscContentItem item = (MiscContentItem) modification.getItem(); final ModificationType type = modification.getType(); final ModificationCondition condition = modification.getCondition(); if(condition != null) { writer.writeAttribute(Attribute.CONDITION.name, condition.toString()); final byte[] existingHash = modification.getTargetHash(); if (existingHash.length > 0) { writer.writeAttribute(Attribute.HASH.name, bytesToHexString(existingHash)); writer.writeAttribute(Attribute.NEW_HASH.name, bytesToHexString(modification.getTargetHash())); if (item.isAffectsRuntime()) { writer.writeAttribute(Attribute.IN_RUNTIME_USE.name, "true");
originalModifications.put(new Location(modification.getItem()), modification); final ContentItem item = modification.getItem(); final byte[] currentContent = modification.getTargetHash(); final byte[] originalContent = original.getItem().getContentHash(); final byte[] originalTarget = original.getTargetHash();
protected ContentModification createContentModification(final ContentItem item, final ModificationType type, final byte[] existingHash, ModificationCondition condition) { return new ContentModification(item, existingHash, type, condition); }