Maybe we could have a hangout tomorrow morning and you could explain your design. It
looks like you have really thought this through and I would like to fully understand
before commenting.
----- Original Message -----
Here is what I am thinking of in providing an ActionDecorator.
<!--
An example of the addition of an "actions" tag to the existing rules
structure
ServiceCreationDecorator must implement an MetaActionDecorator interface.
It would have access to a generated xpath to the specific node found and
possible other information from the rule decorator.
The SwitchyardController would call the process method of this class
which would call the plugin-forge code to create the service.
-->
<windup:xpath-value description="Action : convert action class"
xpath="//*[local-name()='action' and not(starts-with(@class,
'org.jboss.soa.esb.actions'))]/@class"
effort="1" inline="true">
<windup:actions>
<windup:action description="Create Switchyard Intf/Impl service
classes"
class="org.jboss.windup.switchyard.ServiceCreationDecorator" />
</windup:actions>
</windup:xpath-value>
--------------
-- Here is the schema
<xs:complexType name="xpathType">
<xs:sequence>
<xs:element name="namespace" type="xmlNamespace"
minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="hints" type="allBeans"
minOccurs="0" maxOccurs="1"/>
<xs:element name="decorators" type="allBeans"
minOccurs="0"
maxOccurs="1"/>
<xs:element name="actions" type="actionsType"
minOccurs="0"
maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="xpath" use="required"
type="xs:string" />
<xs:attribute name="description" use="required"
type="xs:string" />
<xs:attribute name="effort" type="xs:int" />
</xs:complexType>
<xs:complexType name="actionType">
<xs:annotation>
<xs:documentation>
Attribute class must be the fully qualified name of the class
that
implements the ActionDecorator interface. The class must be
available
in a jar file in the classpath of this tool. The class will
be executed
in the post-analysis phase of Windup.
Attribute condition indicates when the action is to be
executed.
The default value is true; (i.e. when the test condition
yields true
the action will be run.) A setting of false will run this
action if
the test condition yields false.
</xs:documentation>
</xs:annotation>
<xs:attribute name="description" use="optional"
type="xs:string" />
<xs:attribute name="class" use="required"
type="xs:string" />
<xs:attribute name="condition" use="optional"
type="xs:string"
default="true"/>
</xs:complexType>
-----------------
Here is the Interface
public interface MetaActionDecorator {
public void setCondition(String inline);
public boolean isCondition();
public void setDescription(String description);
public String getDescription();
public void setActionClass(String fullyQualifiedName);
public String getActionClass();
public abstract boolean process();
}
-----------------
Here is a convenience class
public abstract class ActionDecorator implements MetaActionDecorator {
private static final Log LOG =
LogFactory.getLog(ChainingDecorator.class);
private boolean condition = true;
private String description;
private String fullyQualifiedName;
public void setCondition(String condition){
this.condition = BooleanUtils.toBoolean(condition);
}
public boolean isCondition(){
return condition;
}
public void setDescription(String description){
this.description = description;
}
public String getDescription(){
return this.description;
}
public void setActionClass(String fullyQualifiedName){
this.fullyQualifiedName = fullyQualifiedName;
}
public String getActionClass(){
return this.fullyQualifiedName;
}
/**
* Add rule specific processing here.
* @return
*/
public abstract boolean process();
}
----- Original Message -----
> From: "Robb Greathouse" <robb.greathouse(a)redhat.com>
> To: "Rebecca Searls" <rsearls(a)redhat.com>
> Cc: "Lincoln Baxter" <lbaxter(a)redhat.com>, "Robb
Greathouse"
> <robb.greathouse(a)jboss.com>, "windup/windup"
> <windup(a)noreply.github.com>, "Brad Davis" <bdavis(a)redhat.com>
> Sent: Thursday, September 5, 2013 12:26:38 PM
> Subject: Re: [windup] Forge integration (changes to have windup generating
> switchyard classes using
> plugin-switchyard api) (#62)
>
> Hi,
>
> Ran into same issues. Agree with your analysis. As stop gap I am using
> the
> windup:xpath-value to test mappings. But as you point out this is not a
> good long term solution.
>
> We will need to create a migration-decorator that can handle command and
> parameter mappings.
>
> When Brad gets back we can discuss the best way to create these in
> accordance
> with his architecture. In the meantime, we should start collecting use
> case
> for mapping decorators.
>
>
> Robb Greathouse
> Partner Enablement
> Middleware Business Unit
> JBoss, a Division of Red Hat
> cellphone 505-507-4906
>
> ----- Original Message -----
> >
> > I will be interested to hear what you found out about ShrinkWrap. It
> > seems
> > this project is just getting started up again.
> >
> > Changing the subject slightly. The implementation I currently have in
> > place
> > is not really what we want going forward.
> > My questions to Brad about how to handling the, "Action : convert action
> > class: class=org.jboss.thing.MySeviceAction"
> > and such was trying to ferret this out. Based upon information that came
> > out
> > in our conf call, the design that is wanted
> > is for each rule to have a "Post-Action-Decorator" which gets
executed at
> > the
> > end of the analysis phase. For SOA we want
> > the current controller to execute each Post-Action-Decorator it finds.
> > Each
> > of these decorators performs a small (limited)
> > task. One will generate the Intf/Impl class. One will create a JMS-bus
> > service binding. One will create and bind a
> > Camel route. These are based upon the "Action : *" stmts currently
> > generated.
> >
> > As a short term workaround critical information has been appended in the
> > description message (e.g. class=org.jboss.thing.MySeviceAction,
> > busid=helloFTPChannel). This is not the desired way to this pass
> > information as we move
> > forward. Its fraught with all kinds of issues.
> >
> > I am thinking the issues and though ways to address them. I will be
> > sharing
> > my thoughts and asking for feedback.
> > It would also be good to have this discussion in the community. I don't
> > think there are yet may subscribers to
> > windup-dev or followers of the forum. Should I start the discussion on
> > the
> > email list anyway or should I look
> > to some other alias?
> >
> >
> >
> >
> > ----- Original Message -----
> > > From: "Lincoln Baxter, III" <notifications(a)github.com>
> > > To: "windup/windup" <windup(a)noreply.github.com>
> > > Cc: "rsearls" <rsearls(a)redhat.com>
> > > Sent: Wednesday, September 4, 2013 4:18:16 PM
> > > Subject: Re: [windup] Forge integration (changes to have windup
> > > generating
> > > switchyard classes using
> > > plugin-switchyard api) (#62)
> > >
> > > > + LOG.warn("No class attribute
for
> > > > action
> > > > tag class="
> > > > + + nName.getNodeValue());
> > > > + }
> > > > +
> > > > + } else {
> > > > + String className =
> > > > StringUtils.substringAfterLast(
> > > > + nClass.getNodeValue(),
".");
> > > > + String packageName =
> > > > StringUtils.substringBeforeLast(
> > > > + nClass.getNodeValue(),
".");
> > > > +
> > > > + LOG.debug("Action tag's
baseName: " +
> > > > className
> > > > + + " package: " +
packageName);
> > > > +
> > > > + BeanFacet beanFacet =
> > > > facetFactory.create(project, BeanFacet.class);
> > > > + beanFacet.install();
> > > > + BeanServiceConfigurator
> > > > beanServiceConfigurator =
> > >
> > > Excellent, this is exactly the kind of integration we want to drive :)
> > > Sucks
> > > you have to use XPath, though. In reality, it's possible that
> > > ShrinkWrap
> > > Descriptors could be leveraged to provide a DSL to inspect the jbossesb
> > > XML
> > > file. Let me see what Andrew Rubinger thinks about this.
> > >
> > > ---
> > > Reply to this email directly or view it on GitHub:
> > >
https://github.com/windup/windup/pull/62/files#r6165297
> > >
> >
>