Skip to content

Commit

Permalink
Added update support and filtered search
Browse files Browse the repository at this point in the history
  • Loading branch information
ethan committed Apr 18, 2019
1 parent 6df43c8 commit 9da533f
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 65 deletions.
102 changes: 55 additions & 47 deletions connector-amqp-import/samples/amqp-import.xml
Original file line number Diff line number Diff line change
Expand Up @@ -99,19 +99,25 @@
<operationalState>
<lastAvailabilityStatus>up</lastAvailabilityStatus>
</operationalState>
<connectorRef oid="0d71290c-cde4-4797-b214-e1291d8efd82"
relation="org:default"
type="c:ConnectorType"/>
<connectorRef type="ConnectorType">
<filter>
<q:equal>
<q:path>c:connectorType</q:path>
<q:value>edu.unc.polygon.connector.amqp.AmqpConnector</q:value>
</q:equal>
</filter>
</connectorRef>

<connectorConfiguration xmlns:icfc="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/connector-schema-3">
<icfc:configurationProperties xmlns:gen654="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/bundle/edu.unc.polygon.connector-amqp-import/edu.unc.polygon.connector.amqp.AmqpConnector">
<gen654:amqpUniqueAttribute>id</gen654:amqpUniqueAttribute>
<gen654:amqpExchangename>midpoint</gen654:amqpExchangename>
<gen654:amqpRoutingkey>midpoint_hr</gen654:amqpRoutingkey>
<gen654:amqpExchangename>sor</gen654:amqpExchangename>
<gen654:amqpRoutingkey>sor_person</gen654:amqpRoutingkey>
<gen654:amqpScimPayloadField>payload</gen654:amqpScimPayloadField>
<gen654:amqpPassword>Guest</gen654:amqpPassword>
<gen654:amqpHost>locahost</gen654:amqpHost>
<gen654:amqpQueuename>midpoint_hr</gen654:amqpQueuename>
<gen654:amqpUsername>Guest</gen654:amqpUsername>
<gen654:amqpPassword>5ecr3t</gen654:amqpPassword>
<gen654:amqpHost>mq</gen654:amqpHost>
<gen654:amqpQueuename>sor_person</gen654:amqpQueuename>
<gen654:amqpUsername>mysql</gen654:amqpUsername>
<gen654:amqpNameAttribute>id</gen654:amqpNameAttribute>
</icfc:configurationProperties>
</connectorConfiguration>
Expand Down Expand Up @@ -364,42 +370,44 @@
<projection>
<assignmentPolicyEnforcement>full</assignmentPolicyEnforcement>
</projection>
<synchronization>
<objectSynchronization>
<enabled>true</enabled>
<correlation>
<q:equal>
<q:path>c:name</q:path>
<expression>
<path>$account/attributes/id</path>
</expression>
</q:equal>
</correlation>
<reaction>
<situation>linked</situation>
<synchronize>true</synchronize>
</reaction>
<reaction>
<situation>deleted</situation>
<synchronize>true</synchronize>
<action>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#deleteFocus</handlerUri>
</action>
</reaction>
<reaction>
<situation>unlinked</situation>
<synchronize>true</synchronize>
<action>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#link</handlerUri>
</action>
</reaction>
<reaction>
<situation>unmatched</situation>
<synchronize>true</synchronize>
<action>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus</handlerUri>
</action>
</reaction>
</objectSynchronization>
</synchronization>
<synchronization>
<objectSynchronization>
<enabled>true</enabled>
<correlation>
<q:equal>
<q:matching>polyStringNorm</q:matching>
<q:path>c:name</q:path>
<expression>
<description>Matches using Name</description>
<path> declare namespace ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3"; $account/attributes/icfs:name </path>
</expression>
</q:equal>
</correlation>
<reaction>
<situation>linked</situation>
<synchronize>true</synchronize>
</reaction>
<reaction>
<situation>deleted</situation>
<synchronize>true</synchronize>
<action>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#deleteFocus</handlerUri>
</action>
</reaction>
<reaction>
<situation>unlinked</situation>
<synchronize>true</synchronize>
<action>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#link</handlerUri>
</action>
</reaction>
<reaction>
<situation>unmatched</situation>
<synchronize>true</synchronize>
<action>
<handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus</handlerUri>
</action>
</reaction>
</objectSynchronization>
</synchronization>
</resource>
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,9 @@


@ConnectorClass(displayNameKey = "UI_AMQP_CONNECTOR_NAME", configurationClass = AmqpConfiguration.class)
public class AmqpConnector implements Connector, DeleteOp, SearchOp<String>, SchemaOp, TestOp {
public class AmqpConnector implements Connector, DeleteOp, SearchOp<AmqpFilter>, SchemaOp, TestOp {

public static final String ATTR_MAIL = "email";
private static final Log LOG = Log.getLog(AmqpConnector.class);

private AmqpConfiguration configuration;
Expand Down Expand Up @@ -68,7 +69,7 @@ public void dispose() {
//handler = null;
}
@Override
public FilterTranslator<String> createFilterTranslator(ObjectClass oc, OperationOptions oo) {
public FilterTranslator<AmqpFilter> createFilterTranslator(ObjectClass oc, OperationOptions oo) {
LOG.info("inside createFilterTranslator");
return new AmqpFilterTranslator();
}
Expand Down Expand Up @@ -186,7 +187,7 @@ public Schema schema() {
}

@Override
public void executeQuery(ObjectClass oc, String uid, ResultsHandler handler, OperationOptions oo) {
public void executeQuery(ObjectClass oc, AmqpFilter filter, ResultsHandler handler, OperationOptions oo) {
LOG.info(">>> executeQuery ");
try {
LOG.info("about to create factory");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package edu.unc.polygon.connector.amqp;

/**
*
*/
public class AmqpFilter {
public String byName;
public String byUid;
public String byEmailAddress;

@Override
public String toString() {
return "AmqpFilter{" +
"byName='" + byName + '\'' +
", byUid=" + byUid +
", byEmailAddress='" + byEmailAddress + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,64 @@
/*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package edu.unc.polygon.connector.amqp;

import org.identityconnectors.common.logging.Log;
import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.Name;
import org.identityconnectors.framework.common.objects.Uid;
import org.identityconnectors.framework.common.objects.filter.AbstractFilterTranslator;
import org.identityconnectors.framework.common.objects.filter.EqualsFilter;

import java.util.List;

public class AmqpFilterTranslator extends AbstractFilterTranslator<String> {
/**
*/
public class AmqpFilterTranslator extends AbstractFilterTranslator<AmqpFilter> {
private static final Log LOG = Log.getLog(AmqpFilterTranslator.class);

@Override
protected String createEqualsExpression(EqualsFilter filter, boolean not) {
protected AmqpFilter createEqualsExpression(EqualsFilter filter, boolean not) {
LOG.ok("createEqualsExpression, filter: {0}, not: {1}", filter, not);

if (not) {
return null;
return null; // not supported
}

Attribute attr = filter.getAttribute();
if (!attr.is(Uid.NAME)) {
return null;
LOG.ok("attr.getName: {0}, attr.getValue: {1}, Uid.NAME: {2}, Name.NAME: {3}", attr.getName(), attr.getValue(), Uid.NAME, Name.NAME);
if (Uid.NAME.equals(attr.getName())) {
if (attr.getValue() != null && attr.getValue().get(0) != null) {
AmqpFilter lf = new AmqpFilter();
lf.byUid = String.valueOf(attr.getValue().get(0));
LOG.ok("lf.byUid: {0}, attr.getValue().get(0): {1}", lf.byUid, attr.getValue().get(0));
return lf;
}
}

List<Object> values = attr.getValue();
if (values.isEmpty()) {
return null;
else if (Name.NAME.equals(attr.getName())) {
if (attr.getValue() != null && attr.getValue().get(0) != null) {
AmqpFilter lf = new AmqpFilter();
lf.byName = String.valueOf(attr.getValue().get(0));
return lf;
}
}
else if (AmqpConnector.ATTR_MAIL.equals(attr.getName())) {
if (attr.getValue() != null && attr.getValue().get(0) != null) {
AmqpFilter lf = new AmqpFilter();
lf.byEmailAddress = String.valueOf(attr.getValue().get(0));
return lf;
}
}

Object value = values.get(0);

return value != null ? value.toString() : null;
return null; // not supported
}
}

0 comments on commit 9da533f

Please sign in to comment.