use of org.drools.drl.ast.descr.TypeDeclarationDescr in project drools by kiegroup.
the class ChangeSetBuilder method diffResource.
private static ResourceChangeSet diffResource(String file, byte[] originalBytes, byte[] currentBytes, List<TypeDeclarationDescr> typeDeclarations) {
ResourceChangeSet pkgcs = new ResourceChangeSet(file, ChangeType.UPDATED);
ResourceType type = ResourceType.determineResourceType(file);
if (ResourceType.DRL.equals(type) || ResourceType.GDRL.equals(type) || ResourceType.RDRL.equals(type) || ResourceType.TDRL.equals(type)) {
try {
PackageDescr originalPkg = new DrlParser().parse(new ByteArrayResource(originalBytes));
PackageDescr currentPkg = new DrlParser().parse(new ByteArrayResource(currentBytes));
String pkgName = isEmpty(currentPkg.getName()) ? getDefaultPackageName() : currentPkg.getName();
String oldPkgName = isEmpty(originalPkg.getName()) ? getDefaultPackageName() : originalPkg.getName();
if (!oldPkgName.equals(pkgName)) {
// so it is useless to further investigate other changes
return pkgcs;
}
pkgcs.setPackageName(pkgName);
for (RuleDescr crd : currentPkg.getRules()) {
pkgcs.getLoadOrder().add(new ResourceChangeSet.RuleLoadOrder(pkgName, crd.getName(), crd.getLoadOrder()));
}
// needs to be cloned
List<RuleDescr> orules = new ArrayList<>(originalPkg.getRules());
diffDescrs(originalBytes, currentBytes, pkgcs, orules, currentPkg.getRules(), ResourceChange.Type.RULE, RULE_CONVERTER);
// needs to be cloned
List<FunctionDescr> ofuncs = new ArrayList<>(originalPkg.getFunctions());
diffDescrs(originalBytes, currentBytes, pkgcs, ofuncs, currentPkg.getFunctions(), ResourceChange.Type.FUNCTION, FUNC_CONVERTER);
// needs to be cloned
List<GlobalDescr> oglobals = new ArrayList<>(originalPkg.getGlobals());
diffDescrs(originalBytes, currentBytes, pkgcs, oglobals, currentPkg.getGlobals(), ResourceChange.Type.GLOBAL, GLOBAL_CONVERTER);
for (TypeDeclarationDescr typeDeclaration : currentPkg.getTypeDeclarations()) {
if (isEmpty(typeDeclaration.getNamespace())) {
typeDeclaration.setNamespace(isEmpty(currentPkg.getNamespace()) ? DEFAULT_PACKAGE : currentPkg.getNamespace());
}
typeDeclarations.add(typeDeclaration);
}
} catch (Exception e) {
logger.error("Error analyzing the contents of " + file + ". Skipping.", e);
}
}
pkgcs.getChanges().sort(Comparator.comparingInt(r -> r.getChangeType().ordinal()));
return pkgcs;
}
use of org.drools.drl.ast.descr.TypeDeclarationDescr in project drools by kiegroup.
the class CompositePackageDescr method internalAdd.
private void internalAdd(Resource resource, PackageDescr packageDescr) {
for (ImportDescr descr : packageDescr.getImports()) {
addImport(descr);
descr.setResource(resource);
}
for (FunctionImportDescr descr : packageDescr.getFunctionImports()) {
addFunctionImport(descr);
descr.setResource(resource);
}
for (AccumulateImportDescr descr : packageDescr.getAccumulateImports()) {
addAccumulateImport(descr);
descr.setResource(resource);
}
for (AttributeDescr descr : packageDescr.getAttributes()) {
addAttribute(descr);
descr.setResource(resource);
}
for (GlobalDescr descr : packageDescr.getGlobals()) {
addGlobal(descr);
descr.setResource(resource);
}
for (FunctionDescr descr : packageDescr.getFunctions()) {
addFunction(descr);
descr.setResource(resource);
}
for (RuleDescr descr : packageDescr.getRules()) {
addRule(descr);
descr.setResource(resource);
}
// Avoid adding the same type declaration twice, see
// TypeDeclarationTest.testDuplicatedTypeDeclarationInDifferentResources
// IncrementalCompilationTest.testIncrementalCompilationWithAmbiguousRedeclares
// RHDM-1738
Set<TypeDeclarationDescr> typeDeclarationDescrs = new HashSet<>(getTypeDeclarations());
for (TypeDeclarationDescr descr : packageDescr.getTypeDeclarations()) {
if (!typeDeclarationDescrs.contains(descr)) {
addTypeDeclaration(descr);
descr.setResource(resource);
}
}
for (EnumDeclarationDescr enumDescr : packageDescr.getEnumDeclarations()) {
addEnumDeclaration(enumDescr);
enumDescr.setResource(resource);
}
for (EntryPointDeclarationDescr descr : packageDescr.getEntryPointDeclarations()) {
addEntryPointDeclaration(descr);
descr.setResource(resource);
}
for (WindowDeclarationDescr descr : packageDescr.getWindowDeclarations()) {
addWindowDeclaration(descr);
descr.setResource(resource);
}
packageDescr.getPreferredPkgUUID().ifPresent(pkgUUID -> {
if (getPreferredPkgUUID().isPresent() && !pkgUUID.equals(getPreferredPkgUUID().get())) {
throw new RuntimeException(String.format("Trying to overwrite preferredPkgUUID %s with a different value %s", getPreferredPkgUUID().get(), pkgUUID));
}
setPreferredPkgUUID(pkgUUID);
});
}
Aggregations