Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/feature/gui-wrapper…
Browse files Browse the repository at this point in the history
…' into feature/gui-wrapper
  • Loading branch information
skublik committed May 24, 2019
2 parents 6a7aeb9 + f29e844 commit 5b25af6
Show file tree
Hide file tree
Showing 40 changed files with 1,205 additions and 235 deletions.
Expand Up @@ -755,6 +755,26 @@ public static boolean isEnableExperimentalFeature(Task task, ModelServiceLocator

}

public static boolean isEnableExperimentalFeature(ModelInteractionService modelInteractionService, Task task, OperationResult result) {
CompiledUserProfile adminGuiConfig = null;
try {
adminGuiConfig = modelInteractionService.getCompiledUserProfile(task, result);
result.recomputeStatus();
result.recordSuccessIfUnknown();
} catch (Exception e) {
LoggingUtils.logException(LOGGER, "Cannot load admin gui config", e);
result.recordPartialError("Cannot load admin gui config. Reason: " + e.getLocalizedMessage());

}

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

return BooleanUtils.isTrue(adminGuiConfig.isEnableExperimentalFeatures());

}

public static boolean isEnableExperimentalFeature(ModelServiceLocator pageBase) {
Task task = pageBase.createSimpleTask("Load admin gui config");
return isEnableExperimentalFeature(task, pageBase);
Expand Down
Expand Up @@ -492,13 +492,6 @@ public PrismContainerValueWrapper<C> createNewItemContainerValueWrapper(
//TODO error handling
}
model.getValues().add((PrismContainerValueWrapper) valueWrapper);
//
// ContainerWrapperFactory factory = new ContainerWrapperFactory(getPageBase());
// Task task = getPageBase().createSimpleTask("Creating new object policy");
// PrismContainerValueWrapper<C> valueWrapper = factory.createContainerValueWrapper(model.getObject(), newItem,
// model.getObject().getObjectStatus(), ValueStatus.ADDED, model.getObject().getPath(), task);
// valueWrapper.setShowEmpty(true, true);
// model.getObject().getValues().add(valueWrapper);
return (PrismContainerValueWrapper<C>) valueWrapper;
}

Expand Down
Expand Up @@ -19,19 +19,14 @@
import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry;
import com.evolveum.midpoint.gui.impl.prism.CaseWorkItemTypeWrapper;
import com.evolveum.midpoint.gui.impl.prism.ExpressionWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismPropertyWrapper;
import com.evolveum.midpoint.gui.impl.prism.component.ExpressionPropertyPanel;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.prism.ValueStatus;
import com.evolveum.midpoint.web.page.admin.workflow.WorkItemDetailsPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseWorkItemType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

Expand Down
Expand Up @@ -55,9 +55,13 @@ public int getOrder() {
@Override
protected PrismPropertyWrapper<ExpressionType> createWrapper(PrismContainerValueWrapper<?> parent, PrismProperty<ExpressionType> item,
ItemStatus status) {
getRegistry().registerWrapperPanel(item.getDefinition().getTypeName(), ExpressionPropertyPanel.class);
ExpressionWrapper propertyWrapper = new ExpressionWrapper(parent, item, status);
return propertyWrapper;
// if (propertyWrapper.isAttributeExpression() || propertyWrapper.isAssociationExpression()) {
getRegistry().registerWrapperPanel(item.getDefinition().getTypeName(), ExpressionPropertyPanel.class);
// } else {
// getRegistry().registerWrapperPanel(item.getDefinition().getTypeName(), PrismPropertyPanel.class);
// }
return propertyWrapper;
}

}
Expand Up @@ -202,7 +202,7 @@ public PrismContainerWrapper<C> createWrapper(Item childContainer, ItemStatus st
}

@Override
public boolean skipCreateWrapper(ItemDefinition<?> def) {
public boolean skipCreateWrapper(ItemDefinition<?> def, WrapperContext wrapperContext) {
return false;
}

Expand Down
Expand Up @@ -36,6 +36,6 @@ public interface ItemWrapperFactory<IW extends ItemWrapper, VW extends PrismValu
IW createWrapper(Item childContainer, ItemStatus status, WrapperContext context) throws SchemaException;
VW createValueWrapper(IW parent, PV value, ValueStatus status, WrapperContext context) throws SchemaException;

boolean skipCreateWrapper(ItemDefinition<?> def);
boolean skipCreateWrapper(ItemDefinition<?> def, WrapperContext wrapperContext);

}
Expand Up @@ -23,9 +23,11 @@

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.ItemWrapper;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismValueWrapper;
import com.evolveum.midpoint.gui.impl.registry.GuiComponentRegistryImpl;
import com.evolveum.midpoint.model.api.ModelInteractionService;
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
Expand All @@ -47,6 +49,7 @@ public abstract class ItemWrapperFactoryImpl<IW extends ItemWrapper, PV extends

@Autowired private GuiComponentRegistryImpl registry;
@Autowired private PrismContext prismContext;
@Autowired private ModelInteractionService modelInteractionService;

@Override
public IW createWrapper(PrismContainerValueWrapper<?> parent, ItemDefinition<?> def, WrapperContext context) throws SchemaException {
Expand Down Expand Up @@ -155,14 +158,18 @@ public PrismContext getPrismContext() {
}

@Override
public boolean skipCreateWrapper(ItemDefinition<?> def) {
public boolean skipCreateWrapper(ItemDefinition<?> def, WrapperContext wrapperContext) {
if (def.isOperational()) {
LOGGER.trace("Skipping creating wrapper for {}, because it is operational.", def.getName());
return true;
}

if (SearchFilterType.COMPLEX_TYPE.equals(def.getTypeName())) {
LOGGER.trace("Skipping creating wrapper for search filter.", def.getName());
LOGGER.trace("Skipping creating wrapper for search filter: {}", def.getName());
return true;
}

if (def.isExperimental() && !WebModelServiceUtils.isEnableExperimentalFeature(modelInteractionService, wrapperContext.getTask(), wrapperContext.getResult())) {
return true;
}

Expand Down
Expand Up @@ -67,7 +67,7 @@ protected void addItemWrapper(ItemDefinition<?> def, PrismContainerValueWrapper<
}

@Override
public boolean skipCreateWrapper(ItemDefinition<?> def) {
public boolean skipCreateWrapper(ItemDefinition<?> def, WrapperContext wrapperContext) {
return false;
}

Expand Down
Expand Up @@ -116,7 +116,7 @@ protected void addItemWrapper(ItemDefinition<?> def, PrismContainerValueWrapper<
}

LOGGER.trace("Found factory {} for {}", factory, def);
if (factory.skipCreateWrapper(def)) {
if (factory.skipCreateWrapper(def, context)) {
return;
}

Expand Down
Expand Up @@ -15,24 +15,48 @@
*/
package com.evolveum.midpoint.gui.impl.factory;

import java.util.Collection;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.prism.PrismContainerPanel;
import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismPropertyPanel;
import com.evolveum.midpoint.gui.impl.prism.PrismPropertyValueWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismPropertyWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismPropertyWrapperImpl;
import com.evolveum.midpoint.gui.impl.prism.PrismValueWrapper;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.prism.PrismPropertyDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SchemaHelper;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskManager;
import com.evolveum.midpoint.util.exception.CommunicationException;
import com.evolveum.midpoint.util.exception.ConfigurationException;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SecurityViolationException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.prism.ValueStatus;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;

/**
* @author katka
Expand All @@ -41,6 +65,15 @@
@Component
public class PrismPropertyWrapperFactoryImpl<T> extends ItemWrapperFactoryImpl<PrismPropertyWrapper<T>, PrismPropertyValue<T>, PrismProperty<T>, PrismPropertyValueWrapper<T>>{

private static final transient Trace LOGGER = TraceManager.getTrace(PrismPropertyWrapperFactoryImpl.class);

@Autowired private ModelService modelService;
@Autowired private SchemaHelper schemaHelper;
@Autowired private TaskManager taskManager;

private static final String DOT_CLASS = PrismPropertyWrapperFactoryImpl.class.getSimpleName() + ".";
private static final String OPERATION_LOAD_LOOKUP_TABLE = DOT_CLASS + "loadLookupTable";

@Override
public boolean match(ItemDefinition<?> def) {
return def instanceof PrismPropertyDefinition;
Expand Down Expand Up @@ -69,6 +102,23 @@ protected PrismPropertyWrapper<T> createWrapper(PrismContainerValueWrapper<?> pa
ItemStatus status) {
getRegistry().registerWrapperPanel(item.getDefinition().getTypeName(), PrismPropertyPanel.class);
PrismPropertyWrapper<T> propertyWrapper = new PrismPropertyWrapperImpl<>(parent, item, status);
PrismReferenceValue valueEnumerationRef = item.getDefinition().getValueEnumerationRef();
if (valueEnumerationRef != null) {
//TODO: task and result from context
Task task = taskManager.createTaskInstance(OPERATION_LOAD_LOOKUP_TABLE);
OperationResult result = new OperationResult(OPERATION_LOAD_LOOKUP_TABLE);
Collection<SelectorOptions<GetOperationOptions>> options = WebModelServiceUtils
.createLookupTableRetrieveOptions(schemaHelper);

try {
PrismObject<LookupTableType> lookupTable = modelService.getObject(LookupTableType.class, valueEnumerationRef.getOid(), options, task, result);
propertyWrapper.setPredefinedValues(lookupTable.asObjectable());
} catch (ObjectNotFoundException | SchemaException | SecurityViolationException | CommunicationException
| ConfigurationException | ExpressionEvaluationException e) {
LOGGER.error("Cannot load lookup table for {} ", item);
//TODO throw???
}
}
return propertyWrapper;
}

Expand Down
Expand Up @@ -23,6 +23,7 @@
import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismPropertyPanel;
import com.evolveum.midpoint.gui.impl.prism.PrismReferencePanel;
import com.evolveum.midpoint.gui.impl.prism.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.gui.impl.prism.PrismReferenceWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismReferenceWrapperImpl;
import com.evolveum.midpoint.gui.impl.prism.PrismValueWrapper;
Expand Down
Expand Up @@ -36,6 +36,7 @@
import com.evolveum.midpoint.gui.impl.prism.PrismContainerPanel;
import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismContainerWrapperImpl;
import com.evolveum.midpoint.gui.impl.prism.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.gui.impl.prism.ShadowAssociationReferenceWrapperImpl;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.Containerable;
Expand Down
Expand Up @@ -44,7 +44,7 @@ public class WrapperContext {

public WrapperContext(Task task, OperationResult result) {
this.task = task;
this.result = result;
this.result = result != null ? result : new OperationResult("temporary"); // TODO !!!
}

public AuthorizationPhaseType getAuthzPhase() {
Expand Down
Expand Up @@ -112,6 +112,17 @@ public void setConstruction(ConstructionType construction) {
this.construction = construction;
}

@Override
public Integer getDisplayOrder() {
if (isAssociationExpression() || isAssociationExpression()) {
//todo MAX_VALUE doesn't guarantee that expression property
//will be displayed the last, as further there will be properties
//without any displayOrder displayed
return Integer.MAX_VALUE;
} else {
return super.getDisplayOrder();
}
}
// @Override
// public boolean hasChanged() {
// for (ValueWrapperOld valueWrapper : getValues()) {
Expand Down
Expand Up @@ -223,7 +223,7 @@ private void addValue(AjaxRequestTarget target) {
target.add(ItemPanel.this);
}

private void removeValue(VW valueToRemove, AjaxRequestTarget target) throws SchemaException {
protected void removeValue(VW valueToRemove, AjaxRequestTarget target) throws SchemaException {
LOGGER.debug("Removing value of {}", valueToRemove);
List<VW> values = getModelObject().getValues();

Expand Down
Expand Up @@ -31,7 +31,6 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
import com.evolveum.midpoint.gui.impl.factory.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
Expand All @@ -57,7 +56,7 @@ public class PrismContainerValueWrapperImpl<C extends Containerable> extends Pri

private static final long serialVersionUID = 1L;

private static final transient Trace LOGGER = TraceManager.getTrace(PrismReferenceValueWrapperImpl.class);
private static final transient Trace LOGGER = TraceManager.getTrace(PrismContainerValueWrapperImpl.class);

private boolean expanded;
private boolean showMetadata = false;
Expand All @@ -83,14 +82,18 @@ public PrismContainerValue<C> getValueToAdd() throws SchemaException {
modifications.addAll(subDelta);
}
}


PrismContainerValue<C> valueToAdd = getOldValue().clone();
if (!modifications.isEmpty()) {
PrismContainerValue<C> valueToAdd = getOldValue().clone();
for (ItemDelta delta : modifications) {
delta.applyTo(valueToAdd);
}
return valueToAdd;
}

if (!valueToAdd.isEmpty()) {
return valueToAdd;
}

return null;
}
Expand All @@ -107,7 +110,7 @@ public <ID extends ItemDelta> void applyDelta(ID delta) throws SchemaException {

@Override
public void setRealValue(C realValue) {
LOGGER.trace("Nothing to do");
LOGGER.info("######$$$$$$Nothing to do");
}

@Override
Expand Down
Expand Up @@ -43,6 +43,7 @@ public PrismPropertyValueWrapper(ItemWrapper<?, ?, ?, ?> parent, PrismPropertyVa
@Override
public void setRealValue(T realValue) {
getNewValue().setValue(realValue);
setStatus(ValueStatus.MODIFIED);
}

public String toShortString() {
Expand Down
Expand Up @@ -30,7 +30,6 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.factory.ItemRealValueModel;
import com.evolveum.midpoint.gui.impl.factory.PrismReferencePanelContext;
import com.evolveum.midpoint.gui.impl.factory.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.prism.Referencable;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.web.component.form.ValueChoosePanel;
Expand Down
Expand Up @@ -13,10 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.evolveum.midpoint.gui.impl.factory;
package com.evolveum.midpoint.gui.impl.prism;

import com.evolveum.midpoint.gui.api.prism.ItemWrapper;
import com.evolveum.midpoint.gui.impl.prism.PrismValueWrapperImpl;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.Referencable;
import com.evolveum.midpoint.util.logging.Trace;
Expand All @@ -39,7 +38,7 @@ public PrismReferenceValueWrapperImpl(ItemWrapper<?, ?, ?, ?> parent, PrismRefer

@Override
public void setRealValue(T realValue) {
LOGGER.trace("Nothing to do");
LOGGER.info("#####$$$$$Nothing to do");
}


Expand Down
Expand Up @@ -20,7 +20,6 @@
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.prism.ItemWrapper;
import com.evolveum.midpoint.gui.impl.factory.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.prism.PrismReference;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.PrismReferenceValue;
Expand Down
Expand Up @@ -21,7 +21,6 @@

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.factory.PrismReferenceValueWrapperImpl;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismPropertyValue;
Expand Down

0 comments on commit 5b25af6

Please sign in to comment.