Skip to content

Commit

Permalink
Merge pull request rosjava#70 from exo-core/action-generation
Browse files Browse the repository at this point in the history
Action generation
  • Loading branch information
Juan Ignacio Ubeira authored Aug 31, 2018
2 parents 608812f + 5a2cdcb commit fe41a5d
Show file tree
Hide file tree
Showing 8 changed files with 282 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@
import org.ros.internal.message.definition.MessageDefinitionProviderChain;
import org.ros.internal.message.definition.MessageDefinitionTupleParser;
import org.ros.internal.message.action.ActionDefinitionFileProvider;
import org.ros.internal.message.action.ActionGenerationTemplateActionGoal;
import org.ros.internal.message.action.ActionGenerationTemplateActionResult;
import org.ros.internal.message.action.ActionGenerationTemplateActionFeedback;
import org.ros.internal.message.action.ActionGenerationTemplateGoal;
import org.ros.internal.message.action.ActionGenerationTemplateResult;
import org.ros.internal.message.action.ActionGenerationTemplateFeedback;
import org.ros.internal.message.service.ServiceDefinitionFileProvider;
import org.ros.internal.message.topic.TopicDefinitionFileProvider;
import org.ros.message.MessageDeclaration;
Expand All @@ -46,6 +52,15 @@ public class GenerateInterfaces {
private final ActionDefinitionFileProvider actionDefinitionFileProvider;
private final MessageDefinitionProviderChain messageDefinitionProviderChain;
private final MessageFactory messageFactory;

private final MessageGenerationTemplate actionGenerationTemplateGoal = new ActionGenerationTemplateGoal();
private final MessageGenerationTemplate actionGenerationTemplateResult = new ActionGenerationTemplateResult();
private final MessageGenerationTemplate actionGenerationTemplateFeedback = new ActionGenerationTemplateFeedback();

private final MessageGenerationTemplate actionGenerationTemplateActionGoal = new ActionGenerationTemplateActionGoal();
private final MessageGenerationTemplate actionGenerationTemplateActionResult = new ActionGenerationTemplateActionResult();
private final MessageGenerationTemplate actionGenerationTemplateActionFeedback = new ActionGenerationTemplateActionFeedback();

static private final String ROS_PACKAGE_PATH = "ROS_PACKAGE_PATH";

public GenerateInterfaces() {
Expand Down Expand Up @@ -153,16 +168,39 @@ private void writeActionInterfaces(File outputDirectory, Collection<String> pack
writeInterface(actionDeclaration, outputDirectory, false);
List<String> goalResultAndFeedback = MessageDefinitionTupleParser.parse(definition, 3);

MessageDeclaration goalDeclaration =
MessageDeclaration.of(actionType.getType() + "Goal", goalResultAndFeedback.get(0));
MessageDeclaration resultDeclaration =
MessageDeclaration.of(actionType.getType() + "Result", goalResultAndFeedback.get(1));
MessageDeclaration feedbackDeclaration =
MessageDeclaration.of(actionType.getType() + "Feedback", goalResultAndFeedback.get(2));
MessageDeclaration goalDeclaration = MessageDeclaration.of(
actionType.getType() + "Goal",
actionGenerationTemplateGoal.applyTemplate(goalResultAndFeedback.get(0))
);
MessageDeclaration resultDeclaration = MessageDeclaration.of(
actionType.getType() + "Result",
actionGenerationTemplateResult.applyTemplate(goalResultAndFeedback.get(1))
);
MessageDeclaration feedbackDeclaration = MessageDeclaration.of(
actionType.getType() + "Feedback",
actionGenerationTemplateFeedback.applyTemplate(goalResultAndFeedback.get(2))
);

MessageDeclaration actionGoalDeclaration = MessageDeclaration.of(
actionType.getType() + "ActionGoal",
actionGenerationTemplateActionGoal.applyTemplate(actionType.getType())
);
MessageDeclaration actionResultDeclaration = MessageDeclaration.of(
actionType.getType() + "ActionResult",
actionGenerationTemplateActionResult.applyTemplate(actionType.getType())
);
MessageDeclaration actionFeedbackDeclaration = MessageDeclaration.of(
actionType.getType() + "ActionFeedback",
actionGenerationTemplateActionFeedback.applyTemplate(actionType.getType())
);

writeInterface(goalDeclaration, outputDirectory, true);
writeInterface(resultDeclaration, outputDirectory, true);
writeInterface(feedbackDeclaration, outputDirectory, true);

writeInterface(actionGoalDeclaration, outputDirectory, true);
writeInterface(actionResultDeclaration, outputDirectory, true);
writeInterface(actionFeedbackDeclaration, outputDirectory, true);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (C) 2012 Google Inc.
*
* 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 org.ros.internal.message;

/**
* @author [email protected] (Arne Peters)
*/
public interface MessageGenerationTemplate {

/**
* @return returns this {@link Message} as a {@link RawMessage}
*/
public String applyTemplate(String messageSource);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2012 Google Inc.
*
* 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 org.ros.internal.message.action;

import org.ros.internal.message.MessageGenerationTemplate;

/**
* @author [email protected] (Arne Peters)
*/
public class ActionGenerationTemplateActionFeedback implements MessageGenerationTemplate {

/**
* @return returns this {@link Message} as a {@link RawMessage}
*/
public String applyTemplate(String messageSource) {
return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
"\n" +
"Header header\n" +
"actionlib_msgs/GoalStatus status\n" +
messageSource + "Feedback feedback";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2012 Google Inc.
*
* 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 org.ros.internal.message.action;

import org.ros.internal.message.MessageGenerationTemplate;

/**
* @author [email protected] (Arne Peters)
*/
public class ActionGenerationTemplateActionGoal implements MessageGenerationTemplate {

/**
* @return returns this {@link Message} as a {@link RawMessage}
*/
public String applyTemplate(String messageSource) {
return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
"\n" +
"Header header\n" +
"actionlib_msgs/GoalID goal_id\n" +
messageSource + "Goal goal";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2012 Google Inc.
*
* 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 org.ros.internal.message.action;

import org.ros.internal.message.MessageGenerationTemplate;

/**
* @author [email protected] (Arne Peters)
*/
public class ActionGenerationTemplateActionResult implements MessageGenerationTemplate {

/**
* @return returns this {@link Message} as a {@link RawMessage}
*/
public String applyTemplate(String messageSource) {
return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
"\n" +
"Header header\n" +
"actionlib_msgs/GoalStatus status\n" +
messageSource + "Result result";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2012 Google Inc.
*
* 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 org.ros.internal.message.action;

import org.ros.internal.message.MessageGenerationTemplate;

/**
* @author [email protected] (Arne Peters)
*/
public class ActionGenerationTemplateFeedback implements MessageGenerationTemplate {

/**
* @return returns this {@link Message} as a {@link RawMessage}
*/
public String applyTemplate(String messageSource) {
return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
"#feedback definition\n" +
messageSource;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2012 Google Inc.
*
* 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 org.ros.internal.message.action;

import org.ros.internal.message.MessageGenerationTemplate;

/**
* @author [email protected] (Arne Peters)
*/
public class ActionGenerationTemplateGoal implements MessageGenerationTemplate {

/**
* @return returns this {@link Message} as a {@link RawMessage}
*/
public String applyTemplate(String messageSource) {
return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
"#goal definition" +
messageSource;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2012 Google Inc.
*
* 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 org.ros.internal.message.action;

import org.ros.internal.message.MessageGenerationTemplate;

/**
* @author [email protected] (Arne Peters)
*/
public class ActionGenerationTemplateResult implements MessageGenerationTemplate {

/**
* @return returns this {@link Message} as a {@link RawMessage}
*/
public String applyTemplate(String messageSource) {
return "# ====== DO NOT MODIFY! AUTOGENERATED FROM AN ACTION DEFINITION ======\n" +
"#result definition" +
messageSource;
}
}

0 comments on commit fe41a5d

Please sign in to comment.