private void updatePackageBinaries(PackageItem item, PackageAssembler packageAssembler) throws DetailedSerializationException { try { ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutput out = new DroolsObjectOutputStream(bout); out.writeObject(packageAssembler.getBinaryPackage()); item.updateCompiledPackage(new ByteArrayInputStream(bout.toByteArray())); out.flush(); out.close(); item.updateBinaryUpToDate(true); RuleBase ruleBase = RuleBaseFactory.newRuleBase(new RuleBaseConfiguration(getClassLoaders(packageAssembler))); ruleBase.addPackage(packageAssembler.getBinaryPackage()); rulesRepository.save(); } catch (Exception e) { e.printStackTrace(); log.error( "An error occurred building the package [" + item.getName() + "]: " + e.getMessage()); throw new DetailedSerializationException( "An error occurred building the package.", e.getMessage()); } }
protected String createPackage(String name, String description, String format, String[] workspace) throws RulesRepositoryException { log.info("USER: "******" CREATING package [" + name + "]"); PackageItem item = rulesRepository.createPackage(name, description, format, workspace); return item.getUUID(); }
public void savePackage(PackageConfigData data) throws SerializationException { log.info("USER:"******" SAVING package [" + data.getName() + "]"); PackageItem item = rulesRepository.loadPackage(data.getName()); // If package is being unarchived. boolean unarchived = (!data.isArchived() && item.isArchived()); Calendar packageLastModified = item.getLastModified(); DroolsHeader.updateDroolsHeader(data.getHeader(), item); updateCategoryRules(data, item); item.updateExternalURI(data.getExternalURI()); item.updateDescription(data.getDescription()); item.archiveItem(data.isArchived()); item.updateBinaryUpToDate(false); if (!data.getFormat().equals("")) { item.updateFormat(data.getFormat()); } RuleBaseCache.getInstance().remove(data.getUuid()); item.checkin(data.getDescription()); // If package is archived, archive all the assets under it if (data.isArchived()) { handleArchivedForSavePackage(data, item); } else if (unarchived) { handleUnarchivedForSavePackage(data, item, packageLastModified); } }
protected void removePackage(String uuid) { try { PackageItem item = rulesRepository.loadPackageByUUID(uuid); log.info("USER:"******" REMOVEING package [" + item.getName() + "]"); item.remove(); rulesRepository.save(); } catch (RulesRepositoryException e) { log.error("Unable to remove package.", e); throw e; } }
protected PackageConfigData loadGlobalPackage() { PackageItem item = rulesRepository.loadGlobalArea(); PackageConfigData data = PackageConfigDataFactory.createPackageConfigDataWithOutDependencies(item); if (data.isSnapshot()) { data.setSnapshotName(item.getSnapshotName()); } return data; }
protected String createSubPackage(String name, String description, String parentNode) throws SerializationException { log.info( "USER: "******" CREATING subPackage [" + name + "], parent [" + parentNode + "]"); PackageItem item = rulesRepository.createSubPackage(name, description, parentNode); return item.getUUID(); }
protected String[] listImagesInPackage(String packageName) throws SerializationException { // load package PackageItem item = rulesRepository.loadPackage(packageName); List<String> retList = new ArrayList<String>(); Iterator<AssetItem> iter = item.getAssets(); while (iter.hasNext()) { AssetItem pitem = iter.next(); if (pitem.getFormat().equalsIgnoreCase("png") || pitem.getFormat().equalsIgnoreCase("gif") || pitem.getFormat().equalsIgnoreCase("jpg")) { retList.add(pitem.getName()); } } return (String[]) retList.toArray(new String[] {}); }
protected PackageConfigData loadPackageConfig(PackageItem packageItem) { PackageConfigData data = PackageConfigDataFactory.createPackageConfigDataWithDependencies(packageItem); if (data.isSnapshot()) { data.setSnapshotName(packageItem.getSnapshotName()); } return data; }
void handleArchivedForSavePackage(PackageConfigData data, PackageItem item) { for (Iterator<AssetItem> iter = item.getAssets(); iter.hasNext(); ) { AssetItem assetItem = iter.next(); if (!assetItem.isArchived()) { assetItem.archiveItem(true); assetItem.checkin(data.getDescription()); } } }
private PackageConfigData[] listSubPackages( PackageItem parentPkg, boolean archive, String workspace, RepositoryFilter filter) { List<PackageConfigData> children = new LinkedList<PackageConfigData>(); handleIteratePackages(archive, workspace, filter, children, parentPkg.listSubPackages()); sortPackages(children); return children.toArray(new PackageConfigData[children.size()]); }
protected void createPackageSnapshot( String packageName, String snapshotName, boolean replaceExisting, String comment) { log.info( "USER:"******" CREATING PACKAGE SNAPSHOT for package: [" + packageName + "] snapshot name: [" + snapshotName); if (replaceExisting) { rulesRepository.removePackageSnapshot(packageName, snapshotName); } rulesRepository.createPackageSnapshot(packageName, snapshotName); PackageItem item = rulesRepository.loadPackageSnapshot(packageName, snapshotName); item.updateCheckinComment(comment); rulesRepository.save(); }
private void handleIteratePackages( boolean archive, String workspace, RepositoryFilter filter, List<PackageConfigData> result, PackageIterator pkgs) { pkgs.setArchivedIterator(archive); while (pkgs.hasNext()) { PackageItem packageItem = pkgs.next(); PackageConfigData data = new PackageConfigData(); data.setUuid(packageItem.getUUID()); data.setName(packageItem.getName()); data.setArchived(packageItem.isArchived()); data.setWorkspaces(packageItem.getWorkspaces()); handleIsPackagesListed(archive, workspace, filter, result, data); data.subPackages = listSubPackages(packageItem, archive, null, filter); } }
void handleUnarchivedForSavePackage( PackageConfigData data, PackageItem item, Calendar packageLastModified) { for (Iterator<AssetItem> iter = item.getAssets(); iter.hasNext(); ) { AssetItem assetItem = iter.next(); // Unarchive the assets archived after the package // ( == at the same time that the package was archived) if (assetItem.getLastModified().compareTo(packageLastModified) >= 0) { assetItem.archiveItem(false); assetItem.checkin(data.getDescription()); } } }
private BuilderResult buildPackage( PackageItem item, boolean force, PackageAssemblerConfiguration packageAssemblerConfiguration) throws DetailedSerializationException { if (!force && item.isBinaryUpToDate()) { // we can just return all OK if its up to date. return BuilderResult.emptyResult(); } PackageAssembler packageAssembler = new PackageAssembler(item, packageAssemblerConfiguration); packageAssembler.compile(); if (packageAssembler.hasErrors()) { BuilderResult result = new BuilderResult(); BuilderResultHelper builderResultHelper = new BuilderResultHelper(); result.addLines(builderResultHelper.generateBuilderResults(packageAssembler.getErrors())); return result; } updatePackageBinaries(item, packageAssembler); return BuilderResult.emptyResult(); }
private boolean isRightOlderThanLeft(PackageItem leftPackage, PackageItem rightPackage) { return leftPackage.getLastModified().compareTo(rightPackage.getLastModified()) > 0; }
private boolean isPackageItemDeleted(PackageItem rightPackage, AssetItem left) { return !rightPackage.containsAsset(left.getName()); }
/** @deprecated in favour of {@link compareSnapshots(SnapshotComparisonPageRequest)} */ protected SnapshotDiffs compareSnapshots( String packageName, String firstSnapshotName, String secondSnapshotName) { SnapshotDiffs diffs = new SnapshotDiffs(); List<SnapshotDiff> list = new ArrayList<SnapshotDiff>(); PackageItem leftPackage = rulesRepository.loadPackageSnapshot(packageName, firstSnapshotName); PackageItem rightPackage = rulesRepository.loadPackageSnapshot(packageName, secondSnapshotName); // Older one has to be on the left. if (isRightOlderThanLeft(leftPackage, rightPackage)) { PackageItem temp = leftPackage; leftPackage = rightPackage; rightPackage = temp; diffs.leftName = secondSnapshotName; diffs.rightName = firstSnapshotName; } else { diffs.leftName = firstSnapshotName; diffs.rightName = secondSnapshotName; } Iterator<AssetItem> leftExistingIter = leftPackage.getAssets(); while (leftExistingIter.hasNext()) { AssetItem left = leftExistingIter.next(); if (isPackageItemDeleted(rightPackage, left)) { SnapshotDiff diff = new SnapshotDiff(); diff.name = left.getName(); diff.diffType = SnapshotDiff.TYPE_DELETED; diff.leftUuid = left.getUUID(); list.add(diff); } } Iterator<AssetItem> rightExistingIter = rightPackage.getAssets(); while (rightExistingIter.hasNext()) { AssetItem right = rightExistingIter.next(); AssetItem left = null; if (right != null && leftPackage.containsAsset(right.getName())) { left = leftPackage.loadAsset(right.getName()); } // Asset is deleted or added if (right == null || left == null) { SnapshotDiff diff = new SnapshotDiff(); if (left == null) { diff.name = right.getName(); diff.diffType = SnapshotDiff.TYPE_ADDED; diff.rightUuid = right.getUUID(); } list.add(diff); } else if (isAssetArchivedOrRestored(right, left)) { // Has the asset // been archived // or restored SnapshotDiff diff = new SnapshotDiff(); diff.name = right.getName(); diff.leftUuid = left.getUUID(); diff.rightUuid = right.getUUID(); if (left.isArchived()) { diff.diffType = SnapshotDiff.TYPE_RESTORED; } else { diff.diffType = SnapshotDiff.TYPE_ARCHIVED; } list.add(diff); } else if (isAssetItemUpdated(right, left)) { // Has the asset been // updated SnapshotDiff diff = new SnapshotDiff(); diff.name = right.getName(); diff.leftUuid = left.getUUID(); diff.rightUuid = right.getUUID(); diff.diffType = SnapshotDiff.TYPE_UPDATED; list.add(diff); } } diffs.diffs = list.toArray(new SnapshotDiff[list.size()]); return diffs; }
void updateCategoryRules(PackageConfigData data, PackageItem item) { KeyValueTO keyValueTO = convertMapToCsv(data.getCatRules()); item.updateCategoryRules(keyValueTO.getKeys(), keyValueTO.getValues()); }