Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
gpalos committed Jun 12, 2015
2 parents 6a90760 + ca0cc8a commit 204a734
Show file tree
Hide file tree
Showing 183 changed files with 7,388 additions and 12,735 deletions.
9 changes: 7 additions & 2 deletions build-system/pom.xml
Expand Up @@ -72,7 +72,7 @@
<activiti-spring.version>5.17.0</activiti-spring.version>
<commons-email.version>1.3</commons-email.version>
<xmlsec.version>2.0.1</xmlsec.version>
<connid.version>1.4.0.49</connid.version>
<connid.version>1.4.2.0-SNAPSHOT</connid.version>
<jasper.version>6.0.0</jasper.version>
<derby.version>10.11.1.1</derby.version>
</properties>
Expand Down Expand Up @@ -405,7 +405,12 @@
<dependency>
<groupId>com.evolveum.polygon</groupId>
<artifactId>connector-ldap</artifactId>
<version>1.4.0.49</version>
<version>1.4.2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.evolveum.polygon</groupId>
<artifactId>connector-ldap-legacy</artifactId>
<version>1.4.0.50</version>
</dependency>
<!-- End connectors -->
<dependency>
Expand Down
Expand Up @@ -76,6 +76,7 @@
import com.evolveum.icf.dummy.resource.DummyObjectClass;
import com.evolveum.icf.dummy.resource.DummyPrivilege;
import com.evolveum.icf.dummy.resource.DummyResource;
import com.evolveum.icf.dummy.resource.DummySyncStyle;
import com.evolveum.icf.dummy.resource.ObjectAlreadyExistsException;
import com.evolveum.icf.dummy.resource.ObjectDoesNotExistException;
import com.evolveum.icf.dummy.resource.SchemaViolationException;
Expand Down Expand Up @@ -952,25 +953,68 @@ public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler ha
List<DummyDelta> deltas = resource.getDeltasSince(syncToken);
for (DummyDelta delta: deltas) {

SyncDeltaBuilder builder = new SyncDeltaBuilder();
Class<? extends DummyObject> deltaObjectClass = delta.getObjectClass();
if (objectClass.is(ObjectClass.ALL_NAME)) {
// take all changes
} else if (objectClass.is(ObjectClass.ACCOUNT_NAME)) {
if (deltaObjectClass != DummyAccount.class) {
log.ok("Skipping delta {0} because of objectclass mismatch", delta);
continue;
}
} else if (objectClass.is(ObjectClass.GROUP_NAME)) {
if (deltaObjectClass != DummyGroup.class) {
log.ok("Skipping delta {0} because of objectclass mismatch", delta);
continue;
}
}

SyncDeltaBuilder deltaBuilder = new SyncDeltaBuilder();
if (deltaObjectClass == DummyAccount.class) {
deltaBuilder.setObjectClass(ObjectClass.ACCOUNT);
} else if (deltaObjectClass == DummyGroup.class) {
deltaBuilder.setObjectClass(ObjectClass.GROUP);
} else if (deltaObjectClass == DummyPrivilege.class) {
deltaBuilder.setObjectClass(new ObjectClass(OBJECTCLASS_PRIVILEGE_NAME));
} else {
throw new IllegalArgumentException("Unknown delta objectClass "+deltaObjectClass);
}

SyncDeltaType deltaType;
if (delta.getType() == DummyDeltaType.ADD || delta.getType() == DummyDeltaType.MODIFY) {
deltaType = SyncDeltaType.CREATE_OR_UPDATE;
DummyAccount account = resource.getAccountById(delta.getObjectId());
if (account == null) {
throw new IllegalStateException("We have delta for account '"+delta.getObjectId()+"' but such account does not exist");
if (resource.getSyncStyle() == DummySyncStyle.DUMB) {
deltaType = SyncDeltaType.CREATE_OR_UPDATE;
} else {
if (delta.getType() == DummyDeltaType.ADD) {
deltaType = SyncDeltaType.CREATE;
} else {
deltaType = SyncDeltaType.UPDATE;
}
}
if (deltaObjectClass == DummyAccount.class) {
DummyAccount account = resource.getAccountById(delta.getObjectId());
if (account == null) {
throw new IllegalStateException("We have delta for account '"+delta.getObjectId()+"' but such account does not exist");
}
ConnectorObject cobject = convertToConnectorObject(account, attributesToGet);
deltaBuilder.setObject(cobject);
} else if (deltaObjectClass == DummyGroup.class) {
DummyGroup group = resource.getGroupById(delta.getObjectId());
if (group == null) {
throw new IllegalStateException("We have delta for group '"+delta.getObjectId()+"' but such group does not exist");
}
ConnectorObject cobject = convertToConnectorObject(group, attributesToGet);
deltaBuilder.setObject(cobject);
} else {
throw new IllegalArgumentException("Unknown delta objectClass "+deltaObjectClass);
}
ConnectorObject cobject = convertToConnectorObject(account, attributesToGet);
builder.setObject(cobject);
} else if (delta.getType() == DummyDeltaType.DELETE) {
deltaType = SyncDeltaType.DELETE;
} else {
throw new IllegalStateException("Unknown delta type "+delta.getType());
}
builder.setDeltaType(deltaType);
deltaBuilder.setDeltaType(deltaType);

builder.setToken(new SyncToken(delta.getSyncToken()));
deltaBuilder.setToken(new SyncToken(delta.getSyncToken()));

Uid uid;
if (configuration.getUidMode().equals(DummyConfiguration.UID_MODE_NAME)) {
Expand All @@ -980,9 +1024,9 @@ public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler ha
} else {
throw new IllegalStateException("Unknown UID mode "+configuration.getUidMode());
}
builder.setUid(uid);
deltaBuilder.setUid(uid);

SyncDelta syncDelta = builder.build();
SyncDelta syncDelta = deltaBuilder.build();
log.info("sync::handle {0}",syncDelta);
handler.handle(syncDelta);
}
Expand Down Expand Up @@ -1137,6 +1181,7 @@ private ConnectorObject convertToConnectorObject(DummyAccount account, Collectio
}

ConnectorObjectBuilder builder = createConnectorObjectBuilderCommon(account, objectClass, attributesToGet, true);
builder.setObjectClass(ObjectClass.ACCOUNT);

// Password is not returned by default (hardcoded ICF specification)
if (account.getPassword() != null && configuration.getReadablePassword() &&
Expand All @@ -1155,12 +1200,14 @@ private ConnectorObject convertToConnectorObject(DummyAccount account, Collectio
private ConnectorObject convertToConnectorObject(DummyGroup group, Collection<String> attributesToGet) {
ConnectorObjectBuilder builder = createConnectorObjectBuilderCommon(group, resource.getGroupObjectClass(),
attributesToGet, true);
builder.setObjectClass(ObjectClass.GROUP);
return builder.build();
}

private ConnectorObject convertToConnectorObject(DummyPrivilege priv, Collection<String> attributesToGet) {
ConnectorObjectBuilder builder = createConnectorObjectBuilderCommon(priv, resource.getPrivilegeObjectClass(),
attributesToGet, false);
builder.setObjectClass(new ObjectClass(OBJECTCLASS_PRIVILEGE_NAME));
return builder.build();
}

Expand Down
Expand Up @@ -45,6 +45,8 @@ public class InternalMonitor {
private static boolean traceConnectorOperation = false;
private static long connectorOperationCount = 0;

private static long connectorSimulatedPagingSearchCount = 0;

private static long shadowFetchOperationCount = 0;
private static boolean traceShadowFetchOperation = false;

Expand Down Expand Up @@ -181,7 +183,18 @@ public static long getConnectorOperationCount() {
public static void recordConnectorOperation(String name) {
connectorOperationCount++;
if (traceConnectorOperation) {
traceOperation("connector "+name, shadowFetchOperationCount);
traceOperation("connector "+name, connectorOperationCount);
}
}

public static long getConnectorSimulatedPagingSearchCount() {
return connectorSimulatedPagingSearchCount;
}

public static void recordConnectorSimulatedPagingSearchCount() {
connectorSimulatedPagingSearchCount++;
if (traceConnectorOperation) {
traceOperation("simulated paged search", connectorSimulatedPagingSearchCount);
}
}

Expand Down
Expand Up @@ -187,8 +187,8 @@ public String getDisplayName() {
public void setDisplayName(String displayName) {
this.displayName = displayName;
}

public String getDescription() {
public String getDescription() {
return description;
}

Expand Down Expand Up @@ -235,6 +235,10 @@ public QName getTypeName() {
public String getNativeAttributeName() {
return attributeDefinition.getNativeAttributeName();
}

public String getFrameworkAttributeName() {
return attributeDefinition.getFrameworkAttributeName();
}

public Collection<? extends DisplayableValue<T>> getAllowedValues() {
return attributeDefinition.getAllowedValues();
Expand Down
Expand Up @@ -669,6 +669,10 @@ public <T> XNode marshall(T bean) throws SchemaException {

Class<? extends Object> beanClass = bean.getClass();

if (beanClass == String.class) {
return createPrimitiveXNode((String)bean, DOMUtil.XSD_STRING, false);
}

//check for enums
if (beanClass.isEnum()){
String enumValue = inspector.findEnumFieldValue(beanClass, bean.toString());
Expand Down
Expand Up @@ -560,9 +560,13 @@ private static ItemPath getPath(MapXNode xmap, PrismContext prismContext) throws
}

private static QName determineMatchingRule(MapXNode xmap) throws SchemaException{
String matchingRuleLocalPart = xmap.getParsedPrimitiveValue(KEY_FILTER_EQUAL_MATCHING, DOMUtil.XSD_STRING);
if (StringUtils.isNotBlank(matchingRuleLocalPart)){
return new QName(PrismConstants.NS_MATCHING_RULE, matchingRuleLocalPart);
String matchingRuleString = xmap.getParsedPrimitiveValue(KEY_FILTER_EQUAL_MATCHING, DOMUtil.XSD_STRING);
if (StringUtils.isNotBlank(matchingRuleString)){
if (QNameUtil.isUri(matchingRuleString)) {
return QNameUtil.uriToQName(matchingRuleString);
} else {
return new QName(PrismConstants.NS_MATCHING_RULE, matchingRuleString);
}
} else {
return null;
}
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010-2013 Evolveum
* Copyright (c) 2010-2015 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -31,6 +31,7 @@ public class ObjectQuery implements DebugDumpable, Serializable {

private ObjectFilter filter;
private ObjectPaging paging;
private boolean allowPartialResults = false;

public ObjectFilter getFilter() {
return filter;
Expand All @@ -48,6 +49,14 @@ public ObjectPaging getPaging() {
return paging;
}

public boolean isAllowPartialResults() {
return allowPartialResults;
}

public void setAllowPartialResults(boolean allowPartialResults) {
this.allowPartialResults = allowPartialResults;
}

public static ObjectQuery createObjectQuery(ObjectFilter filter) {
ObjectQuery query = new ObjectQuery();
query.setFilter(filter);
Expand Down Expand Up @@ -94,6 +103,9 @@ public ObjectQuery cloneEmpty() {
if (this.paging != null) {
clone.paging = this.paging.clone();
}
if (this.allowPartialResults) {
clone.allowPartialResults = true;
}
return clone;
}

Expand Down Expand Up @@ -123,6 +135,12 @@ public String debugDump(int indent) {
sb.append("paging: ").append(paging.debugDump(0));
}

if (allowPartialResults) {
sb.append("\n");
DebugUtil.indentDebugDump(sb, indent);
sb.append("Allow partial results");
}

return sb.toString();
}

Expand All @@ -142,6 +160,9 @@ public String toString() {
} else {
sb.append("null paging");
}
if (allowPartialResults) {
sb.append(",partial");
}
return sb.toString();
}

Expand Down
@@ -1,5 +1,5 @@
/**
* Copyright (c) 2014 Evolveum
* Copyright (c) 2014-2015 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -24,6 +24,7 @@ public class SearchResultMetadata {

private String pagingCookie;
private Integer approxNumberOfAllResults;
private boolean partialResults = false;

/**
* Returns the paging cookie. The paging cookie is used for optimization of paged searches.
Expand Down Expand Up @@ -64,6 +65,19 @@ public Integer getApproxNumberOfAllResults() {
public void setApproxNumberOfAllResults(Integer approxNumberOfAllResults) {
this.approxNumberOfAllResults = approxNumberOfAllResults;
}

/**
* Flag indicating whether the search returned partial results.
* If set to false then all the results requested by the query were returned.
* If set to true then only some results requested by the query were returned.
*/
public boolean isPartialResults() {
return partialResults;
}

public void setPartialResults(boolean partialResults) {
this.partialResults = partialResults;
}

@Override
public int hashCode() {
Expand All @@ -72,6 +86,7 @@ public int hashCode() {
result = prime * result
+ ((approxNumberOfAllResults == null) ? 0 : approxNumberOfAllResults.hashCode());
result = prime * result + ((pagingCookie == null) ? 0 : pagingCookie.hashCode());
result = prime * result + (partialResults ? 1231 : 1237);
return result;
}

Expand All @@ -94,13 +109,15 @@ public boolean equals(Object obj) {
return false;
} else if (!pagingCookie.equals(other.pagingCookie))
return false;
if (partialResults != other.partialResults)
return false;
return true;
}

@Override
public String toString() {
return "SearchResultMetadata(pagingCookie=" + pagingCookie + ", approxNumberOfAllResults="
+ approxNumberOfAllResults + ")";
+ approxNumberOfAllResults + ", partialResults=" + partialResults + ")";
}

}
Expand Up @@ -33,6 +33,7 @@ public class MidPointConstants {
public static final QName RA_INTENT = new QName(NS_RA, "intent");
public static final QName RA_NATIVE_OBJECT_CLASS = new QName(NS_RA, "nativeObjectClass");
public static final QName RA_NATIVE_ATTRIBUTE_NAME = new QName(NS_RA, "nativeAttributeName");
public static final QName RA_FRAMEWORK_ATTRIBUTE_NAME = new QName(NS_RA, "frameworkAttributeName");
public static final QName RA_RETURNED_BY_DEFAULT_NAME = new QName(NS_RA, "returnedByDefault");
public static final QName RA_DISPLAY_NAME_ATTRIBUTE = new QName(NS_RA, "displayNameAttribute");
public static final QName RA_NAMING_ATTRIBUTE = new QName(NS_RA, "namingAttribute");
Expand Down
Expand Up @@ -264,6 +264,13 @@ private PrismPropertyDefinition createResourceAttributeDefinition(QName elementN
attrDef.setNativeAttributeName(nativeAttributeName);
}

// frameworkAttributeName
Element frameworkAttrElement = SchemaProcessorUtil.getAnnotationElement(annotation, MidPointConstants.RA_FRAMEWORK_ATTRIBUTE_NAME);
String frameworkAttributeName = frameworkAttrElement == null ? null : frameworkAttrElement.getTextContent();
if (!StringUtils.isEmpty(frameworkAttributeName)) {
attrDef.setFrameworkAttributeName(frameworkAttributeName);
}

// returnedByDefault
attrDef.setReturnedByDefault(SchemaProcessorUtil.getAnnotationBoolean(annotation, MidPointConstants.RA_RETURNED_BY_DEFAULT_NAME));

Expand All @@ -280,6 +287,9 @@ public void addExtraPropertyAnnotations(PrismPropertyDefinition definition, Elem
if (rad.getNativeAttributeName() != null) {
schemaToDomProcessor.addAnnotation(MidPointConstants.RA_NATIVE_ATTRIBUTE_NAME, rad.getNativeAttributeName(), appinfo);
}
if (rad.getFrameworkAttributeName() != null) {
schemaToDomProcessor.addAnnotation(MidPointConstants.RA_FRAMEWORK_ATTRIBUTE_NAME, rad.getFrameworkAttributeName(), appinfo);
}
if (rad.getReturnedByDefault() != null) {
schemaToDomProcessor.addAnnotation(MidPointConstants.RA_RETURNED_BY_DEFAULT_NAME, rad.getReturnedByDefault().toString(), appinfo);
}
Expand Down

0 comments on commit 204a734

Please sign in to comment.