كيفية تشغيل سير عمل Xpand برمجياً على نموذج في طاولة عمل ثانية؟

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

سؤال

لدي مكون إضافي للمولد Xtext/Xpand (oAW 4.3، Eclipse 3.4)، والذي أقوم بتشغيله مع المكون الإضافي للمحرر في طاولة عمل ثانية.هناك، أرغب في تشغيل مهام سير عمل Xpand برمجيًا على ملف النموذج الذي أقوم بإنشائه.إذا قمت بتعيين ملف النموذج باستخدام المسار المطلق لملف IFile الموجود لدي، على سبيل المثال.مع:

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)

إلى أي قيمة يجب أن أقوم بتعيين سمة ملف النموذج (dslFile) في الخريطة التي أسلمها إلى WorkflowRunner:

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

لقد حاولت أيضًا ترك الخصائص فارغة والإشارة إلى ملف النموذج المتعلق بملف سير العمل (داخل ملف سير العمل)، ولكن هذا يؤدي إلى FileNotFoundException.تشغيل كل هذا في تطبيق عادي (وليس في طاولة عمل ثانية) يعمل بشكل جيد.

هل كانت مفيدة؟

المحلول 2

لقد وجدت المساعدة في منتدى openArchitectureWare.باستخدام أساسا

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

يعمل، ولكن عليك تحديد البحث عنه عبر URI في سير العمل الذي تتصل به:

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

نصائح أخرى

شيئان مهمان للأشخاص الذين يبحثون هنا... استخدم TE IFLE لـ "file.get...."، وبناء الجملة الصحيح للمسارات هو "file:/c:/myOSbla".

هذا هو تطبيق عينة 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