Skip to content

Commit

Permalink
"Create and start campaign" functionality.
Browse files Browse the repository at this point in the history
Changed ObjectQuery/Filter to process containers instead of objects (TODO: rename to PrismQuery)
Few hacks in prisms related to inclusion polymorphism of PCV's. TODO: test that.
  • Loading branch information
mederly committed May 15, 2015
1 parent bfabb2f commit 23a53b6
Show file tree
Hide file tree
Showing 43 changed files with 752 additions and 442 deletions.
Expand Up @@ -27,8 +27,7 @@
import com.evolveum.midpoint.web.component.data.column.LinkColumn;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.page.admin.workflow.PageAdminWorkItems;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationRunType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AccessCertificationCampaignType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
Expand Down Expand Up @@ -78,23 +77,23 @@ private void initLayout() {
Form mainForm = new Form(ID_MAIN_FORM);
add(mainForm);

ObjectDataProvider provider = new ObjectDataProvider(PageCertificationRuns.this, AccessCertificationRunType.class);
ObjectDataProvider provider = new ObjectDataProvider(PageCertificationRuns.this, AccessCertificationCampaignType.class);
provider.setQuery(createQuery());
TablePanel table = new TablePanel<>(ID_CERTIFICATION_RUNS_TABLE, provider, initColumns());
table.setShowPaging(false);
table.setOutputMarkupId(true);
mainForm.add(table);
}

private List<IColumn<AccessCertificationRunType, String>> initColumns() {
List<IColumn<AccessCertificationRunType, String>> columns = new ArrayList<>();
private List<IColumn<AccessCertificationCampaignType, String>> initColumns() {
List<IColumn<AccessCertificationCampaignType, String>> columns = new ArrayList<>();

IColumn column;
column = new LinkColumn<SelectableBean<AccessCertificationRunType>>(createStringResource("PageCertificationRuns.table.name"),
column = new LinkColumn<SelectableBean<AccessCertificationCampaignType>>(createStringResource("PageCertificationRuns.table.name"),
ReportType.F_NAME.getLocalPart(), "value.name") {

@Override
public void onClick(AjaxRequestTarget target, IModel<SelectableBean<AccessCertificationRunType>> rowModel) {
public void onClick(AjaxRequestTarget target, IModel<SelectableBean<AccessCertificationCampaignType>> rowModel) {
// TODO
}
};
Expand Down
Expand Up @@ -1159,20 +1159,24 @@ public void applyDefinition(ItemDefinition definition, boolean force) throws Sch
}

public void applyDefinition(PrismContainerDefinition<C> containerDef, boolean force) throws SchemaException {
if (containerDef.isWildcard()) {
PrismContainerDefinition valueDefinition = getConcreteTypeDefinition();
if (valueDefinition == null) {
valueDefinition = containerDef;
}
if (valueDefinition.isWildcard()) {
// No point in aplying this. Nothing will change and there may be phantom errors.
return;
}
if (rawElements != null) {
for (Object rawElement: rawElements) {
Item<?,?> subitem = parseRawElement(rawElement, containerDef);
Item<?,?> subitem = parseRawElement(rawElement, valueDefinition);
merge(subitem);
}
rawElements = null;
}
if (rawXNode != null) {
XNodeProcessor xnodeProcessor = containerDef.getPrismContext().getXnodeProcessor();
PrismContainerValue<C> newCVal = xnodeProcessor.parsePrismContainerValue(rawXNode, containerDef);
XNodeProcessor xnodeProcessor = valueDefinition.getPrismContext().getXnodeProcessor();
PrismContainerValue<C> newCVal = xnodeProcessor.parsePrismContainerValue(rawXNode, valueDefinition);
// Maybe we need to manually reset parent on items?
addAll(newCVal.getItems());
rawXNode = null;
Expand All @@ -1183,7 +1187,7 @@ public void applyDefinition(PrismContainerDefinition<C> containerDef, boolean fo
// Item has a definition already, no need to apply it
continue;
}
ItemDefinition itemDefinition = determineItemDefinition(item.getElementName(), containerDef);
ItemDefinition itemDefinition = determineItemDefinition(item.getElementName(), valueDefinition);
if (itemDefinition == null && item.getDefinition() != null && item.getDefinition().isDynamic()) {
// We will not apply the null definition here. The item has a dynamic definition that we don't
// want to destroy as it cannot be reconstructed later.
Expand Down Expand Up @@ -1520,7 +1524,9 @@ public void setConcreteType(QName concreteType) {
this.concreteTypeDefinition = null;
}

private PrismContainerDefinition getConcreteTypeDefinition() {
// TODO change from PrismContainerDefinition to ComplexTypeDefinition
// because in current state there should be an element definition for each subtype that is to be resolvable in this way
public PrismContainerDefinition getConcreteTypeDefinition() {
if (concreteTypeDefinition != null) {
return concreteTypeDefinition;
}
Expand Down
Expand Up @@ -314,6 +314,18 @@ public <C extends Containerable> PrismContainerValue<C> parsePrismContainerValue
private <C extends Containerable> PrismContainerValue<C> parsePrismContainerValueFromMap(MapXNode xmap, PrismContainerDefinition<C> containerDef,
Collection<QName> ignoredItems) throws SchemaException {
Long id = getContainerId(xmap);

// override container definition, if explicit type is specified
PrismContainerDefinition valueDefinition = containerDef;
if (xmap.getTypeQName() != null) {
PrismContainerDefinition specificDef = prismContext.getSchemaRegistry().findContainerDefinitionByType(xmap.getTypeQName());
if (specificDef != null) {
valueDefinition = specificDef;
} else {
// TODO raise exception here?
// by silently proceeding we risk losing some subclass-specific items
}
}
PrismContainerValue<C> cval = new PrismContainerValue<C>(null, null, null, id, xmap.getTypeQName(), prismContext);
for (Entry<QName,XNode> xentry: xmap.entrySet()) {
QName itemQName = xentry.getKey();
Expand All @@ -323,9 +335,9 @@ private <C extends Containerable> PrismContainerValue<C> parsePrismContainerValu
if (QNameUtil.matchAny(itemQName, ignoredItems)) {
continue;
}
ItemDefinition itemDef = locateItemDefinition(containerDef, itemQName, xentry.getValue());
ItemDefinition itemDef = locateItemDefinition(valueDefinition, itemQName, xentry.getValue());
if (itemDef == null) {
if (containerDef.isRuntimeSchema()) {
if (valueDefinition.isRuntimeSchema()) {
PrismSchema itemSchema = getSchemaRegistry().findSchemaByNamespace(itemQName.getNamespaceURI());
if (itemSchema != null) {
// If we already have schema for this namespace then a missing element is
Expand All @@ -342,7 +354,7 @@ private <C extends Containerable> PrismContainerValue<C> parsePrismContainerValu
}
} else {
if (isStrict()) {
throw new SchemaException("Item " + itemQName + " has no definition (in container "+containerDef+")" + "while parsing " + xmap.debugDump(), itemQName);
throw new SchemaException("Item " + itemQName + " has no definition (in container value "+valueDefinition+")" + "while parsing " + xmap.debugDump(), itemQName);
} else {
// Just skip item
continue;
Expand Down
Expand Up @@ -234,6 +234,7 @@ private <C extends Containerable> void serializeContainerValue(MapXNode xmap, Pr
}
if (containerVal.getConcreteType() != null) {
xmap.setTypeQName(containerVal.getConcreteType());
xmap.setExplicitTypeDeclaration(true);
}

Collection<QName> serializedItems = new ArrayList<>();
Expand Down
Expand Up @@ -16,10 +16,12 @@

package com.evolveum.midpoint.prism.query;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;

/**
* Filter designed to explicitly match everything. It is used in some special cases, e.g.
Expand Down Expand Up @@ -62,8 +64,7 @@ public String toString() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) {
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
return true;

}
}
Expand Up @@ -21,6 +21,7 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismConstants;
import com.evolveum.midpoint.prism.PrismObject;
Expand Down Expand Up @@ -95,7 +96,7 @@ public String toString() {


@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException{
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
for (ObjectFilter filter : getConditions()){
if (!filter.match(object, matchingRuleRegistry)){
return false;
Expand Down
Expand Up @@ -210,7 +210,7 @@ public ItemPath getPath() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException{
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
Item filterItem = getFilterItem();
if (!super.match(object, matchingRuleRegistry)){
return false;
Expand Down
Expand Up @@ -114,7 +114,7 @@ public String toString() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) {
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
throw new UnsupportedOperationException("Matching object and greater filter not supported yet");
}

Expand Down
Expand Up @@ -22,11 +22,13 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;

public class InOidFilter extends ObjectFilter {

Expand Down Expand Up @@ -126,8 +128,7 @@ public InOidFilter clone() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object,
MatchingRuleRegistry matchingRuleRegistry) {
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
return false;
}

Expand Down
Expand Up @@ -18,6 +18,7 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
Expand Down Expand Up @@ -111,8 +112,8 @@ public String toString() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) {
throw new UnsupportedOperationException("Matching object and greater filter not supported yet");
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
throw new UnsupportedOperationException("Matching object and less filter not supported yet");
}

@Override
Expand Down
Expand Up @@ -16,10 +16,12 @@

package com.evolveum.midpoint.prism.query;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;

/**
* Filter designed to explicitly match nothing. It is used in some special cases, e.g.
Expand Down Expand Up @@ -62,8 +64,7 @@ public String toString() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) {
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
return false;

}
}
Expand Up @@ -18,6 +18,7 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismContext;
Expand Down Expand Up @@ -85,8 +86,7 @@ public String toString() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException{
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
return !getFilter().match(object, matchingRuleRegistry);

}
}
Expand Up @@ -18,6 +18,7 @@

import java.io.Serializable;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
Expand All @@ -35,7 +36,7 @@ public abstract class ObjectFilter implements DebugDumpable, Serializable, Reviv

public abstract ObjectFilter clone();

public abstract <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException;
public abstract boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException;

protected void cloneValues(ObjectFilter clone) {
}
Expand Down
Expand Up @@ -73,8 +73,7 @@ public static ObjectQuery createObjectQuery(ObjectFilter filter, ObjectPaging pa
}

public static <T extends Objectable> boolean match(PrismObject<T> object, ObjectFilter filter, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException{
return filter.match(object, matchingRuleRegistry);
// return false;
return filter.match(object.asObjectable(), matchingRuleRegistry);
}

public ObjectQuery clone() {
Expand Down
Expand Up @@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.List;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
Expand Down Expand Up @@ -89,7 +90,7 @@ public String toString() {


@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException{
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
for (ObjectFilter filter : getConditions()){
if (filter.match(object, matchingRuleRegistry)){
return true;
Expand Down
Expand Up @@ -16,11 +16,13 @@

package com.evolveum.midpoint.prism.query;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.match.MatchingRuleRegistry;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;

public class OrgFilter extends ObjectFilter {

Expand Down Expand Up @@ -164,7 +166,7 @@ public String toString() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) {
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
// TODO Auto-generated method stub
return false;
}
Expand Down
Expand Up @@ -165,11 +165,9 @@ private List<T> getCloneValuesList() {
return clonedValues;
}

public Item getObjectItem(PrismObject object){

public Item getObjectItem(Containerable object){
ItemPath path = getFullPath();
return object.findItem(path);

return object.asPrismContainerValue().findItem(path);
}

public Item getFilterItem() throws SchemaException{
Expand Down Expand Up @@ -212,28 +210,16 @@ public boolean isRaw() {
}

@Override
public <T extends Objectable> boolean match(PrismObject<T> object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException{
// if (getObjectItem(object) == null && getValues() == null) {
// return true;
// }
//
Item filterItem = getFilterItem();
MatchingRule matching = getMatchingRuleFromRegistry(matchingRuleRegistry, filterItem);
public boolean match(Containerable object, MatchingRuleRegistry matchingRuleRegistry) throws SchemaException {
//Item filterItem = getFilterItem();
//MatchingRule matching = getMatchingRuleFromRegistry(matchingRuleRegistry, filterItem);

Item item = getObjectItem(object);

if (item == null){
return false;
}

// if (item == null && getValues() == null) {
// return true;
// }
//
// if (item == null && getValues() != null) {
// return false;
// }

if (!item.isEmpty() && (getValues() == null || getValues().isEmpty())){
return false;
}
Expand Down

0 comments on commit 23a53b6

Please sign in to comment.