2番目のワークベンチのモデルでXpandワークフローをプログラムで実行する方法は?

StackOverflow https://stackoverflow.com/questions/139525

質問

Xtext / Xpand(oAW 4.3、Eclipse 3.4)ジェネレータープラグインがあり、2番目のワークベンチでエディタープラグインと一緒に実行します。そこで、作成したモデルファイルに対してXpandワークフローをプログラムで実行したいと思います。私が持っているIFileの絶対パスを使用してモデルファイルを設定すると、 with:

String dslFile = file.getLocation().makeAbsolute().toOSString();

または次で取得したファイルURIを使用する場合:

String dslFile = file.getLocationURI().toString();

ファイルが見つかりません:

org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Resource '/absolute/path/to/my/existing/dsl.file' does not exist. 
at org.openarchitectureware.xtext.parser.impl.AbstractParserComponent.invokeInternal(AbstractParserComponent.java:55)

WorkflowRunnerに渡すマップのモデルファイル属性(dslFile)をどの値に設定する必要がありますか

Map properties = new HashMap();
properties.put("modelFile", dslFile);

プロパティを空のままにして、ワークフローファイル(ワークフローファイル内)に関連するモデルファイルを参照しようとしましたが、FileNotFoundExceptionが発生しました。このすべてを(2番目のワークベンチではなく)通常のアプリで実行すると正常に機能します。

役に立ちましたか?

解決 2

openArchitectureWareフォーラムでヘルプを見つけました。基本的に使用する

properties.put("modelFile", file.getLocation().makeAbsolute().toOSString());

機能しますが、呼び出しているワークフローのURIで検索するように指定する必要があります:

<component class="org.eclipse.mwe.emf.Reader">
    <uri value='${modelFile}'/>
    <modelSlot value='theModel'/>
</component>

他のヒント

ここで見ている人にとって2つの重要なこと... TEは&quot; file.get ....&quot;にRIFLEを使用し、パスの正しい構文は&quot; file:/ c:/&quot;です。 。

これはサンプルアプリケーション Launcher.java (デフォルトパッケージに含まれています):

import gnu.getopt.Getopt;
import gnu.getopt.LongOpt;

import java.io.File;
import java.io.IOException;

import org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher;

public class Launcher implements Runnable {

    //
    // main program
    //

    public static void main(final String[] args) {
        new Launcher(args).run();
    }


    //
    // private final fields
    //

    private static final String defaultModelDir     = "src/main/resources/model";
    private static final String defaultTargetDir    = "target/generated/pageflow-maven-plugin/java";
    private static final String defaultFileEncoding = "UTF-8";

    private static final LongOpt[] longopts = new LongOpt[] {
        new LongOpt("baseDir",   LongOpt.REQUIRED_ARGUMENT, new StringBuffer(), 'b'),
        new LongOpt("modelDir",  LongOpt.REQUIRED_ARGUMENT, new StringBuffer(), 'm'),
        new LongOpt("targetDir", LongOpt.REQUIRED_ARGUMENT, new StringBuffer(), 't'),
        new LongOpt("encoding",  LongOpt.REQUIRED_ARGUMENT, new StringBuffer(), 'e'),
        new LongOpt("help",      LongOpt.NO_ARGUMENT,       null,               'h'),
        new LongOpt("verbose",   LongOpt.NO_ARGUMENT,       null,               'v'),
    };


    private final String[] args;

    //
    // public constructors
    //

    public Launcher(final String[] args) {
        this.args = args;
    }


    public void run() {
        final String cwd = System.getProperty("user.dir");
        String baseDir   = cwd;
        String modelDir  = defaultModelDir;
        String targetDir = defaultTargetDir;
        String encoding  = defaultFileEncoding;
        boolean verbose = false;

        final StringBuffer sb = new StringBuffer();
        final Getopt g = new Getopt("pageflow-dsl-generator", this.args, "b:m:t:e:hv;", longopts);
        g.setOpterr(false); // We'll do our own error handling
        int c;
        while ((c = g.getopt()) != -1)
            switch (c) {
                case 'b':
                    baseDir = g.getOptarg();
                    break;
                case 'm':
                    modelDir = g.getOptarg();
                    break;
                case 't':
                    targetDir = g.getOptarg();
                    break;
                case 'e':
                    encoding = g.getOptarg();
                    break;
                case 'h':
                    printUsage();
                    System.exit(0);
                    break;
                case 'v':
                    verbose = true;
                    break;
                case '?':
                default:
                    System.out.println("The option '" + (char) g.getOptopt() + "' is not valid");
                    printUsage();
                    System.exit(1);
                    break;
            }

        String absoluteModelDir;
        String absoluteTargetDir;

        try {
            absoluteModelDir  = checkDir(baseDir, modelDir, false, true);
            absoluteTargetDir = checkDir(baseDir, targetDir, true, true);
        } catch (final IOException e) {
            throw new RuntimeException(e.getMessage(), e.getCause());
        }

        if (verbose) {
            System.err.println(String.format("modeldir  = %s", absoluteModelDir));
            System.err.println(String.format("targetdir = %s", absoluteTargetDir));
            System.err.println(String.format("encoding  = %s", encoding));
        }

        Mwe2Launcher.main(
                new String[] {
                        "workflow.PageflowGenerator",
                        "-p", "modelDir=".concat(absoluteModelDir),
                        "-p", "targetDir=".concat(absoluteTargetDir),
                        "-p", "fileEncoding=".concat(encoding)
                });

    }


    private void printUsage() {
        System.err.println("Syntax: [-b <baseDir>] [-m <modelDir>] [-t <targetDir>] [-e <encoding>] [-h] [-v]");
        System.err.println("Options:");
        System.err.println("  -b, --baseDir     project home directory, e.g: /home/workspace/myapp");
        System.err.println("  -m, --modelDir    default is: ".concat(defaultModelDir));
        System.err.println("  -t, --targetDir   default is: ".concat(defaultTargetDir));
        System.err.println("  -e, --encoding    default is: ".concat(defaultFileEncoding));
        System.err.println("  -h, --help        this help text");
        System.err.println("  -v, --verbose     verbose mode");
    }

    private String checkDir(final String basedir, final String dir, final boolean create, final boolean fail) throws IOException {
        final StringBuilder sb = new StringBuilder();
        sb.append(basedir).append('/').append(dir);
        final File f = new File(sb.toString()).getCanonicalFile();
        final String absolutePath = f.getAbsolutePath();
        if (create) {
            if (f.isDirectory()) return absolutePath;
            if (f.mkdirs()) return absolutePath;
        } else {
            if (f.isDirectory()) return absolutePath;
        }
        if (!fail) return null;
        throw new IOException(String.format("Failed to locate or create directory %s", absolutePath));
    }

    private String checkFile(final String basedir, final String file, final boolean fail) throws IOException {
        final StringBuilder sb = new StringBuilder();
        sb.append(basedir).append('/').append(file);
        final File f = new File(sb.toString()).getCanonicalFile();
        final String absolutePath = f.getAbsolutePath();
        if (f.isFile()) return absolutePath;
        if (!fail) return null;
        throw new IOException(String.format("Failed to find or locate directory %s", absolutePath));
    }

}

...これはその pom.xml です:

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.vaadin</groupId>
    <artifactId>pageflow-dsl-generator</artifactId>
    <version>0.1.0-SNAPSHOT</version>

    <build>
        <sourceDirectory>src</sourceDirectory>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <index>true</index>
                        <manifest>
                            <mainClass>Launcher</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>

    </build>



    <dependencies>
        <dependency>
            <groupId>urbanophile</groupId>
            <artifactId>java-getopt</artifactId>
            <version>1.0.9</version>
        </dependency>
    </dependencies>

</project>

残念ながら、このpom.xmlはパッケージ化することを意図していません(少なくともまだ)。 パッケージングに関する手順については、 リンクテキスト

楽しんでください:)

リチャードゴメス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top