On 10/05/21 16:11, Martin van Es wrote:
Hi Francesco,

Ok, I can log debug statements!

When I inspect the entity object on any of the available methods for e.g. 
org.apache.syncope.core.provisioning.api.pushpull.PushActions it seems to be of 
class JPAUser.

Now, what I expect (but maybe I'm completely mistaken) is to be able to 
manipulate the JPAUser object as it flows into the target resource. For 
example, I expect some get'ers, and set'ers on (internal) attributes so that I 
can inspect values, conditionally alter or add them and update the changes back 
into the object to be provisioned. I know much of this can be done using 
attribute mapping logic in the normal resource configuration, but what if the 
logic was a bit more complicated? Are these groovy scripts meant and able to 
manipulate attributes as I think they are? I've taken a look at the JPAUser API 
documentation[1], and although the class is quite rich and supports e.g. 
add(UPlainAttr attr) I don't see ways to get, set or update available 
attributes on the object?

You can have a look at what can be done in a PropagationActions class by 
looking at matching classes under

https://github.com/apache/syncope/tree/2_1_X/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation

About PushActions and PullActions you can check

https://github.com/apache/syncope/tree/2_1_X/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull

HTH
Regards.

[1] 
http://syncope.apache.org/apidocs/2.0/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.html
 
<http://syncope.apache.org/apidocs/2.0/org/apache/syncope/core/persistence/jpa/entity/user/JPAUser.html>

Best regards.
Martin

On Mon, May 10, 2021 at 2:19 PM Francesco Chicchiriccò <ilgro...@apache.org 
<mailto:ilgro...@apache.org>> wrote:

    On 10/05/21 14:05, Martin van Es wrote:


    On Mon, May 10, 2021 at 9:07 AM Francesco Chicchiriccò <ilgro...@apache.org 
<mailto:ilgro...@apache.org>> wrote:

        On 07/05/21 19:50, Martin van Es wrote:
        Another question.
        How would I print debug (core.log) statements in a Groovy propagation 
action script?

        Not very related to the subject, but you can find a relevant example 
here:

        
https://github.com/apache/syncope/blob/2_1_X/fit/core-reference/src/test/resources/rest/SearchScript.groovy#L104
 
<https://github.com/apache/syncope/blob/2_1_X/fit/core-reference/src/test/resources/rest/SearchScript.groovy#L104>

    Thx for your input!

    This is the output when I blindly add log.info <http://log.info>() to a 
test Groovy propagation action script:

    11:57:53.811 DEBUG 
org.apache.syncope.core.provisioning.java.ConnectorManager - Connector to be 
registered: 
ConnectorFacadeProxy{connector=org.identityconnectors.framework.impl.api.local.LocalConnectorFacadeImpl@63b8
    d810
    capabitilies=[UPDATE, DELETE, CREATE, SEARCH, AUTHENTICATE]}
    11:57:53.811 DEBUG 
org.apache.syncope.core.provisioning.java.ConnectorManager - Successfully 
registered bean 
connInstance-Master-3229BE00-2A72-4A78-A9BE-002A729A784D-service-cloud
    11:57:53.813 DEBUG 
org.apache.syncope.core.provisioning.api.job.SchedTaskJobDelegate - Executing 
push on JPAExternalResource[service-cloud]
    11:57:54.063 DEBUG 
org.apache.syncope.core.provisioning.api.pushpull.SyncopeResultHandler - 
Pushing USER with key 89b4b6da-1ef3-4720-b4b6-da1ef3072081 towards 
JPAExternalResource[service-cloud]
    11:57:56.666 ERROR 
org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher - While 
building JPAImplementation[My_Groovy_PropagationAction]
    org.codehaus.groovy.control.MultipleCompilationErrorsException: startup 
failed:
    Script_591aa0a4f0c025faabe5fd7f86d74fb0.groovy: 39: [Static type checking] 
- The variable [log] is undeclared.
    @ line 39, column 5.
    log.info <http://log.info>("Entering " + action + " Script");
          ^

    The main problem here probably is that I'm not a hard-core Java developer 
and I'm trying to create a maximum flexibility, zero-compilation identity 
synchronisation setup for the team to work with. Simple syncope-console 
editable Groovy scripts would help tremendously with that goal!

    Sorry, I did not read well that you were not interested in Groovy scripts 
for connectors but in Groovy Propagation Actions classes.

    You can use Groovy's @Slf4j then:

    import groovy.transform.CompileStatic
    import groovy.util.logging.Slf4j
    import org.apache.syncope.core.persistence.api.entity.task.PropagationTask
    import 
org.apache.syncope.core.provisioning.api.propagation.PropagationActions
    import org.identityconnectors.framework.common.objects.ConnectorObject

    @Slf4j
    @CompileStatic
    class MyPropagationActions implements PropagationActions {

      @Override
      void before(PropagationTask task, ConnectorObject beforeObj) {
        log.error("About to run {}", task)
      }
    }

    Logging statements will be sent to core.log.

    Regards.

--
Francesco Chicchiriccò

Tirasa - Open Source Excellence
http://www.tirasa.net/

Member at The Apache Software Foundation
Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail
http://home.apache.org/~ilgrosso/

Reply via email to