Sandbox-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- 1825 discussions
r527 - in misctestproject/trunk/src/main/java/org/nuiton/test: . thread
by echatellier@users.nuiton.org 16 Apr '12
by echatellier@users.nuiton.org 16 Apr '12
16 Apr '12
Author: echatellier
Date: 2012-04-16 17:07:37 +0200 (Mon, 16 Apr 2012)
New Revision: 527
Url: http://nuiton.org/repositories/revision/sandbox/527
Log:
Add test on deamon/non-deamon threads
Added:
misctestproject/trunk/src/main/java/org/nuiton/test/thread/
misctestproject/trunk/src/main/java/org/nuiton/test/thread/TestThreads.java
misctestproject/trunk/src/main/java/org/nuiton/test/thread/ThreadA.java
Added: misctestproject/trunk/src/main/java/org/nuiton/test/thread/TestThreads.java
===================================================================
--- misctestproject/trunk/src/main/java/org/nuiton/test/thread/TestThreads.java (rev 0)
+++ misctestproject/trunk/src/main/java/org/nuiton/test/thread/TestThreads.java 2012-04-16 15:07:37 UTC (rev 527)
@@ -0,0 +1,37 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.nuiton.test.thread;
+
+public class TestThreads {
+
+ public static void main(String... args) {
+ ThreadA ta = new ThreadA();
+ ta.setDaemon(true);
+ ta.start();
+
+ System.out.println("exit main thread");
+ }
+}
Property changes on: misctestproject/trunk/src/main/java/org/nuiton/test/thread/TestThreads.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: misctestproject/trunk/src/main/java/org/nuiton/test/thread/ThreadA.java
===================================================================
--- misctestproject/trunk/src/main/java/org/nuiton/test/thread/ThreadA.java (rev 0)
+++ misctestproject/trunk/src/main/java/org/nuiton/test/thread/ThreadA.java 2012-04-16 15:07:37 UTC (rev 527)
@@ -0,0 +1,43 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.nuiton.test.thread;
+
+public class ThreadA extends Thread {
+
+ @Override
+ public void run() {
+ for (int i = 1 ; i < 100 ; i++) {
+ System.out.println("Thread A = " + i);
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+}
Property changes on: misctestproject/trunk/src/main/java/org/nuiton/test/thread/ThreadA.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
1
0
Author: echatellier
Date: 2012-02-08 18:17:37 +0100 (Wed, 08 Feb 2012)
New Revision: 526
Url: http://nuiton.org/repositories/revision/sandbox/526
Log:
svn:ignore
Modified:
jnijnajntest/
Property changes on: jnijnajntest
___________________________________________________________________
Added: svn:ignore
+ .settings
.classpath
.project
1
0
r525 - in jnijnajntest: . src src/main src/main/java src/main/java/org src/main/java/org/test src/main/java/org/test/testjna src/main/java/org/test/testjna/notify src/main/java/org/test/testjna/unix src/main/java/org/test/testjni src/main/resources
by echatellier@users.nuiton.org 08 Feb '12
by echatellier@users.nuiton.org 08 Feb '12
08 Feb '12
Author: echatellier
Date: 2012-02-08 18:16:37 +0100 (Wed, 08 Feb 2012)
New Revision: 525
Url: http://nuiton.org/repositories/revision/sandbox/525
Log:
Initial import
Added:
jnijnajntest/compjni.sh
jnijnajntest/org_test_testjni_IdleJNI.c
jnijnajntest/org_test_testjni_IdleJNI.h
jnijnajntest/pom.xml
jnijnajntest/src/
jnijnajntest/src/main/
jnijnajntest/src/main/java/
jnijnajntest/src/main/java/org/
jnijnajntest/src/main/java/org/test/
jnijnajntest/src/main/java/org/test/testjna/
jnijnajntest/src/main/java/org/test/testjna/TestIdleJNA.java
jnijnajntest/src/main/java/org/test/testjna/TestNotifyJNA.java
jnijnajntest/src/main/java/org/test/testjna/notify/
jnijnajntest/src/main/java/org/test/testjna/notify/Notify.java
jnijnajntest/src/main/java/org/test/testjna/unix/
jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java
jnijnajntest/src/main/java/org/test/testjna/unix/Xss.java
jnijnajntest/src/main/java/org/test/testjni/
jnijnajntest/src/main/java/org/test/testjni/IdleJNI.java
jnijnajntest/src/main/java/org/test/testjni/TestIdleJNI.java
jnijnajntest/src/main/resources/
jnijnajntest/src/main/resources/logback.xml
Added: jnijnajntest/compjni.sh
===================================================================
--- jnijnajntest/compjni.sh (rev 0)
+++ jnijnajntest/compjni.sh 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,8 @@
+#/bin/bash
+
+pushd target/classes
+javah org.test.testjni.IdleJNI
+popd
+
+gcc -I /usr/include -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -c org_test_testjni_IdleJNI.c -fPIC
+gcc -I /usr/include -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -shared org_test_testjni_IdleJNI.o -o libtestidle.so -L/usr/lib -rdynamic -lX11 -lXss -lXext
Added: jnijnajntest/org_test_testjni_IdleJNI.c
===================================================================
--- jnijnajntest/org_test_testjni_IdleJNI.c (rev 0)
+++ jnijnajntest/org_test_testjni_IdleJNI.c 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,62 @@
+/* /usr/include/X11/extensions/scrnsaver.h */
+#include <X11/extensions/scrnsaver.h>
+#include <string.h> /* pour strcmp() */
+#include "org_test_testjni_IdleJNI.h"
+
+/**
+ * Major thanks to Dan Price for helping to rewrite this library
+ * to work correctly under Solaris and VNC. Thanks also for
+ * plugging the memory leaks and error detection.
+ */
+static int get_x_idle_time(long *idle) {
+ XScreenSaverInfo *ss_info = NULL;
+ Display *display;
+ static int firsttime = 1; //Is this the first time we've run this method?
+
+ if((display = XOpenDisplay(NULL)) == NULL) {
+ printf("Couldn't open display\n");
+ return(-1);
+ }
+
+ if(firsttime) {
+ int evb, erb;
+ if(XScreenSaverQueryExtension(display, &evb, &erb) == False) {
+ printf("No screen saver extension\n");
+ XCloseDisplay(display);
+ return(-2);
+ }
+ firsttime = 0;
+ }
+
+ if((ss_info = XScreenSaverAllocInfo()) == NULL) {
+ printf("Could not alloc screen saver info\n");
+ XCloseDisplay(display);
+ return(-1);
+ }
+
+ if(XScreenSaverQueryInfo(display, DefaultRootWindow(display), ss_info) == 0) {
+ printf("Could not query root window\n");
+ XFree(ss_info);
+ XCloseDisplay(display);
+ return(-1);
+ }
+ *idle = ss_info->idle;
+
+ XFree(ss_info);
+ XCloseDisplay(display);
+ return(0);
+}
+
+JNIEXPORT jlong JNICALL Java_org_test_testjni_IdleJNI_getIdleTime (
+ JNIEnv* env, /* Environnement JNI */
+ jobject thiz /* Pointeur "this" de l'instance courante */
+) {
+ int ret;
+ long time = 0;
+
+ ret = get_x_idle_time(&time);
+
+ if(ret == 0) return(time);
+ return (ret);
+}
+
Added: jnijnajntest/org_test_testjni_IdleJNI.h
===================================================================
--- jnijnajntest/org_test_testjni_IdleJNI.h (rev 0)
+++ jnijnajntest/org_test_testjni_IdleJNI.h 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,21 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class org_test_testjni_IdleJNI */
+
+#ifndef _Included_org_test_testjni_IdleJNI
+#define _Included_org_test_testjni_IdleJNI
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: org_test_testjni_IdleJNI
+ * Method: getIdleTime
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_org_test_testjni_IdleJNI_getIdleTime
+ (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
Added: jnijnajntest/pom.xml
===================================================================
--- jnijnajntest/pom.xml (rev 0)
+++ jnijnajntest/pom.xml 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,39 @@
+<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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.test</groupId>
+ <artifactId>jnijnajntest</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>jna</artifactId>
+ <version>3.4.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>net.java.dev.jna</groupId>
+ <artifactId>platform</artifactId>
+ <version>3.4.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.6.4</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>1.6.4</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>1.0.0</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Added: jnijnajntest/src/main/java/org/test/testjna/TestIdleJNA.java
===================================================================
--- jnijnajntest/src/main/java/org/test/testjna/TestIdleJNA.java (rev 0)
+++ jnijnajntest/src/main/java/org/test/testjna/TestIdleJNA.java 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,52 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.test.testjna;
+
+import org.test.testjna.unix.UnixSystemInfo;
+import org.test.testjni.IdleJNI;
+
+/**
+ * TODO add comment here.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TestIdleJNA {
+
+ public static void main(String... args) throws InterruptedException {
+
+ UnixSystemInfo idleJNA = new UnixSystemInfo();
+ while (true) {
+ Thread.sleep(1000);
+
+ long idle = idleJNA.getIdleTime();
+ System.out.println("Idle since " + idle + "ms");
+ }
+ }
+}
Property changes on: jnijnajntest/src/main/java/org/test/testjna/TestIdleJNA.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: jnijnajntest/src/main/java/org/test/testjna/TestNotifyJNA.java
===================================================================
--- jnijnajntest/src/main/java/org/test/testjna/TestNotifyJNA.java (rev 0)
+++ jnijnajntest/src/main/java/org/test/testjna/TestNotifyJNA.java 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,49 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.test.testjna;
+
+import org.test.testjna.notify.Notify;
+import org.test.testjna.notify.Notify.NotifyNotification;
+
+/**
+ * TODO add comment here.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TestNotifyJNA {
+
+ public static void main(String... args) throws InterruptedException {
+
+ Notify notify = Notify.INSTANCE;
+ notify.notify_init("test");
+ NotifyNotification notif = notify.notify_notification_new("Test", "hello réunion dev", null, null);
+ notify.notify_notification_show(notif, null);
+ }
+}
Property changes on: jnijnajntest/src/main/java/org/test/testjna/TestNotifyJNA.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: jnijnajntest/src/main/java/org/test/testjna/notify/Notify.java
===================================================================
--- jnijnajntest/src/main/java/org/test/testjna/notify/Notify.java (rev 0)
+++ jnijnajntest/src/main/java/org/test/testjna/notify/Notify.java 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,54 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.test.testjna.notify;
+
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+
+/**
+ * TODO add comment here.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public interface Notify extends Library {
+
+ Notify INSTANCE = (Notify) Native.loadLibrary("notify", Notify.class);
+
+ public static class NotifyNotification extends Structure {
+ public Pointer parent_object;
+ public Pointer priv;
+ }
+
+ public boolean notify_init(String appName);
+ public NotifyNotification notify_notification_new(String summary, String body, String icon, Structure attach);
+ public boolean notify_notification_show(NotifyNotification notification, Structure error);
+}
Property changes on: jnijnajntest/src/main/java/org/test/testjna/notify/Notify.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java
===================================================================
--- jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java (rev 0)
+++ jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,145 @@
+/*
+ * #%L
+ * jTimer
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2007 - 2011 CodeLutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package org.test.testjna.unix;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jna.platform.unix.X11;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * Linux system info.
+ *
+ * Based on
+ * https://jdic.dev.java.net/source/browse/jdic/src/incubator/systeminfo
+ * /src/unix/native/jni/systeminfo.c?rev=1.1.1.1&view=markup source code.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class UnixSystemInfo {
+
+ /** log. */
+ private static Logger logger = LoggerFactory.getLogger(UnixSystemInfo.class);
+
+ /**
+ * Constructor.
+ *
+ * Package visibility
+ */
+ public UnixSystemInfo() {
+ }
+
+ public long getIdleTime() {
+
+ long idleTime = 0;
+
+ try {
+ idleTime = getXssIdleTime();
+ } catch (Exception e) {
+ // TODO catch more specific exception
+ if (logger.isErrorEnabled()) {
+ logger.error("Can't detect idle time : ", e);
+ }
+ idleTime = 0;
+ }
+
+ return idleTime;
+ }
+
+ /**
+ * Get idle time via Xss.
+ *
+ * @return idle time
+ */
+ protected long getXssIdleTime() {
+
+ long idleTime = 0;
+
+ // get X11 display
+ X11.Display display = X11.INSTANCE.XOpenDisplay(null);
+ if (display == null) {
+ logger.error("Can't open X11 display");
+ } else {
+ // Display is opened
+
+ // check if screensaver extension is enabled
+ IntByReference eventBase = new IntByReference();
+ IntByReference errorBase = new IntByReference();
+
+ if (!Xss.INSTANCE.XScreenSaverQueryExtension(display, eventBase,
+ errorBase)) {
+ if (logger.isErrorEnabled()) {
+ logger.error("Can't find xscreensaver extension, "
+ + "idle time can't be detected");
+ }
+ } else {
+ // screensaver is enabled
+
+ Xss.XScreenSaverInfo screenSaverInfo = Xss.INSTANCE
+ .XScreenSaverAllocInfo();
+
+ if (screenSaverInfo == null) {
+ logger.error("Could not alloc screen saver info");
+ } else {
+ // get root window
+ X11.Window rootWindow = X11.INSTANCE
+ .XDefaultRootWindow(display);
+
+ if (rootWindow == null) {
+ logger.error("Could not query root window");
+ } else {
+
+ // FIX : without this, cause random NPE
+ screenSaverInfo.window = rootWindow;
+
+ Xss.INSTANCE.XScreenSaverQueryInfo(display, rootWindow,
+ screenSaverInfo);
+ if (screenSaverInfo.idle == null) {
+ logger.error("screenSaverInfo.idle is null");
+ } else {
+ idleTime = screenSaverInfo.idle.longValue();
+ }
+ }
+ }
+
+ // free resources
+ // TODO should be freed
+ //X11.INSTANCE.XFree(screenSaverInfo);
+ }
+
+ // free resources
+ X11.INSTANCE.XCloseDisplay(display);
+ }
+
+ return idleTime;
+ }
+
+}
Property changes on: jnijnajntest/src/main/java/org/test/testjna/unix/UnixSystemInfo.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: jnijnajntest/src/main/java/org/test/testjna/unix/Xss.java
===================================================================
--- jnijnajntest/src/main/java/org/test/testjna/unix/Xss.java (rev 0)
+++ jnijnajntest/src/main/java/org/test/testjna/unix/Xss.java 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,96 @@
+/*
+ * #%L
+ * jTimer
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2007 - 2010 CodeLutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/gpl-3.0.html>.
+ * #L%
+ */
+
+package org.test.testjna.unix;
+
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.NativeLong;
+import com.sun.jna.Structure;
+import com.sun.jna.platform.unix.X11;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * libXss JNA interface.
+ *
+ * /usr/include/X11/extensions/scrnsaver.h
+ *
+ * Incomplete definition.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public interface Xss extends Library {
+
+ /** Xss Instance */
+ Xss INSTANCE = (Xss) Native.loadLibrary("Xss", Xss.class);
+
+ /**
+ * XScreenSaverInfo struct
+ */
+ public static class XScreenSaverInfo extends Structure {
+ public X11.Window window; /* screen saver window - may not exist */
+ public int state; /* ScreenSaverOff, ScreenSaverOn, ScreenSaverDisabled */
+ public int kind; /* ScreenSaverBlanked, ...Internal, ...External */
+ public NativeLong til_or_since; /* time til or since screen saver */
+ public NativeLong idle; /* total time since last user input */
+ public NativeLong eventMask; /* currently selected events for this client */
+ }
+
+ /**
+ * Information sur l'activation de l'ecran de veille de X11.
+ *
+ * @param display display
+ * @param event_base event_base
+ * @param error_base error_base
+ *
+ * @return true if XScreenSaver extension is loaded
+ *
+ * @see IntByReference
+ */
+ public boolean XScreenSaverQueryExtension(X11.Display display,
+ IntByReference event_base, IntByReference error_base);
+
+ /**
+ * XScreenSaverAllocInfo.
+ *
+ * @return XScreenSaverInfo instance
+ */
+ public XScreenSaverInfo XScreenSaverAllocInfo();
+
+ /**
+ * XScreenSaverQueryInfo.
+ *
+ * @param display
+ * @param drawable
+ * @param infos
+ * @return status flag
+ */
+ public int XScreenSaverQueryInfo(X11.Display display,
+ X11.Drawable drawable, XScreenSaverInfo infos);
+}
Property changes on: jnijnajntest/src/main/java/org/test/testjna/unix/Xss.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: jnijnajntest/src/main/java/org/test/testjni/IdleJNI.java
===================================================================
--- jnijnajntest/src/main/java/org/test/testjni/IdleJNI.java (rev 0)
+++ jnijnajntest/src/main/java/org/test/testjni/IdleJNI.java 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,49 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.test.testjni;
+
+/**
+ * A compiler avec "javah org.test.testjni.IdleJNI".
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class IdleJNI {
+
+ /* Bloc static : le code est exécuté une seule fois
+ * lors du chargement de la classe
+ */
+ static {
+ /* On charge la librairie en utilisant son nom de base : */
+ System.loadLibrary("testidle");
+ }
+
+ public native long getIdleTime();
+
+}
Property changes on: jnijnajntest/src/main/java/org/test/testjni/IdleJNI.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: jnijnajntest/src/main/java/org/test/testjni/TestIdleJNI.java
===================================================================
--- jnijnajntest/src/main/java/org/test/testjni/TestIdleJNI.java (rev 0)
+++ jnijnajntest/src/main/java/org/test/testjni/TestIdleJNI.java 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,49 @@
+/*
+ * #%L
+ *
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2012 Codelutin, Chatellier Eric
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+
+package org.test.testjni;
+
+/**
+ * TODO add comment here.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TestIdleJNI {
+
+ public static void main(String... args) throws InterruptedException {
+
+ IdleJNI idleJNI = new IdleJNI();
+ while (true) {
+ Thread.sleep(1000);
+
+ long idle = idleJNI.getIdleTime();
+ System.out.println("Idle since " + idle + "ms");
+ }
+ }
+}
Property changes on: jnijnajntest/src/main/java/org/test/testjni/TestIdleJNI.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: jnijnajntest/src/main/resources/logback.xml
===================================================================
--- jnijnajntest/src/main/resources/logback.xml (rev 0)
+++ jnijnajntest/src/main/resources/logback.xml 2012-02-08 17:16:37 UTC (rev 525)
@@ -0,0 +1,15 @@
+<configuration>
+
+ <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>%d{yyyy/MM/dd HH:mm:ss} [%thread] %-5level %logger{56} - %msg%n</Pattern>
+ </layout>
+ </appender>
+
+ <logger name="org.test" level="DEBUG" />
+
+ <root level="WARN">
+ <appender-ref ref="stdout" />
+ </root>
+
+</configuration>
\ No newline at end of file
1
0
Author: echatellier
Date: 2012-02-08 18:15:56 +0100 (Wed, 08 Feb 2012)
New Revision: 524
Url: http://nuiton.org/repositories/revision/sandbox/524
Log:
Initial import.
Added:
jnijnajntest/
1
0
r523 - in masc/masc-api: . src/main/java/fr/inra/masc/io src/main/java/fr/inra/masc/io/parser src/main/java/fr/inra/masc/io/writer src/main/java/fr/inra/masc/services src/main/xmi src/test/java/fr/inra/masc/services
by sletellier@users.nuiton.org 15 Dec '11
by sletellier@users.nuiton.org 15 Dec '11
15 Dec '11
Author: sletellier
Date: 2011-12-15 17:13:00 +0100 (Thu, 15 Dec 2011)
New Revision: 523
Url: http://nuiton.org/repositories/revision/sandbox/523
Log:
Rename fr.ifremer to fr.inra :(
Modified:
masc/masc-api/pom.xml
masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
masc/masc-api/src/main/xmi/mexico.zargo
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
Modified: masc/masc-api/pom.xml
===================================================================
--- masc/masc-api/pom.xml 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/pom.xml 2011-12-15 16:13:00 UTC (rev 523)
@@ -117,8 +117,8 @@
<id>mexico-beans</id>
<phase>generate-sources</phase>
<configuration>
- <defaultPackage>fr.ifremer.mexico</defaultPackage>
- <fullPackagePath>fr.ifremer.mexico</fullPackagePath>
+ <defaultPackage>fr.inra.mexico</defaultPackage>
+ <fullPackagePath>fr.inra.mexico</fullPackagePath>
<inputs>src/main/xmi:mexico.zargo</inputs>
</configuration>
<goals>
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,11 +1,11 @@
package fr.inra.masc.io;
-import fr.ifremer.mexico.model.Domain;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.Factor;
-import fr.ifremer.mexico.model.Feature;
-import fr.ifremer.mexico.model.InputDesign;
-import fr.ifremer.mexico.model.Scenario;
+import fr.inra.mexico.model.Domain;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.Factor;
+import fr.inra.mexico.model.Feature;
+import fr.inra.mexico.model.InputDesign;
+import fr.inra.mexico.model.Scenario;
/**
* Regroup all mexico xml constants tags
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -2,15 +2,15 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import fr.ifremer.mexico.model.Domain;
-import fr.ifremer.mexico.model.DomainImpl;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.ExperimentDesignImpl;
-import fr.ifremer.mexico.model.Factor;
-import fr.ifremer.mexico.model.FactorImpl;
-import fr.ifremer.mexico.model.Feature;
-import fr.ifremer.mexico.model.FeatureImpl;
-import fr.ifremer.mexico.model.ValueType;
+import fr.inra.mexico.model.Domain;
+import fr.inra.mexico.model.DomainImpl;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.ExperimentDesignImpl;
+import fr.inra.mexico.model.Factor;
+import fr.inra.mexico.model.FactorImpl;
+import fr.inra.mexico.model.Feature;
+import fr.inra.mexico.model.FeatureImpl;
+import fr.inra.mexico.model.ValueType;
import fr.inra.masc.MascTechnicalException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -2,12 +2,12 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.Factor;
-import fr.ifremer.mexico.model.InputDesign;
-import fr.ifremer.mexico.model.InputDesignImpl;
-import fr.ifremer.mexico.model.Scenario;
-import fr.ifremer.mexico.model.ScenarioImpl;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.Factor;
+import fr.inra.mexico.model.InputDesign;
+import fr.inra.mexico.model.InputDesignImpl;
+import fr.inra.mexico.model.Scenario;
+import fr.inra.mexico.model.ScenarioImpl;
import fr.inra.masc.MascTechnicalException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,6 +1,5 @@
package fr.inra.masc.io.parser;
-import fr.inra.masc.io.DateFormatFactory;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,8 +1,8 @@
package fr.inra.masc.io.writer;
-import fr.ifremer.mexico.model.Domain;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.Factor;
+import fr.inra.mexico.model.Domain;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.Factor;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,8 +1,8 @@
package fr.inra.masc.io.writer;
-import fr.ifremer.mexico.model.Factor;
-import fr.ifremer.mexico.model.InputDesign;
-import fr.ifremer.mexico.model.Scenario;
+import fr.inra.mexico.model.Factor;
+import fr.inra.mexico.model.InputDesign;
+import fr.inra.mexico.model.Scenario;
import java.io.File;
import java.io.IOException;
@@ -18,7 +18,7 @@
import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO_ORDER_NUMBER;
/**
- * Writer to create input design file with {@link fr.ifremer.mexico.model.InputDesign} model
+ * Writer to create input design file with {@link fr.inra.mexico.model.InputDesign} model
*
* @author sletellier <letellier(a)codelutin.com>
* @since 0.1
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,6 +1,6 @@
package fr.inra.masc.io.writer;
-import fr.ifremer.mexico.model.Feature;
+import fr.inra.mexico.model.Feature;
import fr.inra.masc.io.DateFormatFactory;
import java.io.File;
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,7 +1,7 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.InputDesign;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.InputDesign;
import fr.inra.masc.io.parser.ExperimentDesignParser;
import fr.inra.masc.io.parser.InputDesignParser;
import org.apache.commons.logging.Log;
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -2,17 +2,17 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.ExperimentDesignImpl;
-import fr.ifremer.mexico.model.Factor;
-import fr.ifremer.mexico.model.FactorImpl;
-import fr.ifremer.mexico.model.Feature;
-import fr.ifremer.mexico.model.FeatureImpl;
-import fr.ifremer.mexico.model.InputDesign;
-import fr.ifremer.mexico.model.InputDesignImpl;
-import fr.ifremer.mexico.model.Scenario;
-import fr.ifremer.mexico.model.ScenarioImpl;
-import fr.ifremer.mexico.model.ValueType;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.ExperimentDesignImpl;
+import fr.inra.mexico.model.Factor;
+import fr.inra.mexico.model.FactorImpl;
+import fr.inra.mexico.model.Feature;
+import fr.inra.mexico.model.FeatureImpl;
+import fr.inra.mexico.model.InputDesign;
+import fr.inra.mexico.model.InputDesignImpl;
+import fr.inra.mexico.model.Scenario;
+import fr.inra.mexico.model.ScenarioImpl;
+import fr.inra.mexico.model.ValueType;
import fr.inra.masc.model.Criteria;
import fr.inra.masc.model.EditableCriteria;
import fr.inra.masc.model.MascModel;
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,7 +1,7 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.InputDesign;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.InputDesign;
import fr.inra.masc.io.writer.ExperimentDesignXmlWriter;
import fr.inra.masc.io.writer.InputDesignXmlWriter;
import org.apache.commons.logging.Log;
Modified: masc/masc-api/src/main/xmi/mexico.zargo
===================================================================
(Binary files differ)
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,7 +1,7 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.InputDesign;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.InputDesign;
import fr.inra.masc.model.MascModel;
import org.junit.Test;
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,8 +1,8 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.InputDesign;
-import fr.ifremer.mexico.model.Scenario;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.InputDesign;
+import fr.inra.mexico.model.Scenario;
import fr.inra.masc.model.Criteria;
import fr.inra.masc.model.EditableCriteria;
import fr.inra.masc.model.MascModel;
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java 2011-12-15 11:55:36 UTC (rev 522)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java 2011-12-15 16:13:00 UTC (rev 523)
@@ -1,7 +1,7 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperimentDesign;
-import fr.ifremer.mexico.model.InputDesign;
+import fr.inra.mexico.model.ExperimentDesign;
+import fr.inra.mexico.model.InputDesign;
import fr.inra.masc.model.MascModel;
import org.junit.Test;
1
0
15 Dec '11
Author: sletellier
Date: 2011-12-15 12:55:36 +0100 (Thu, 15 Dec 2011)
New Revision: 522
Url: http://nuiton.org/repositories/revision/sandbox/522
Log:
Fix tests
Modified:
masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java 2011-12-15 10:50:26 UTC (rev 521)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java 2011-12-15 11:55:36 UTC (rev 522)
@@ -25,8 +25,11 @@
*/
public class InputDesignXmlWriter extends MexicoXmlWriter<InputDesign> {
+ protected ExperimentDesignXmlWriter experimentDesignXmlWriter;
+
public InputDesignXmlWriter(File file, InputDesign model) throws IOException {
super(file, model);
+ experimentDesignXmlWriter = new ExperimentDesignXmlWriter(file, model.getExperimentDesign());
}
@Override
@@ -45,7 +48,7 @@
addParameter(rootXmlNode, INPUT_DESIGN_DATE, formatDate(date));
// experiement design
- rootXmlNode.add(getRootElement());
+ rootXmlNode.add(experimentDesignXmlWriter.getRootElement());
}
protected void composeScenarios(XmlNode rootXmlNode) {
1
0
r521 - in masc/masc-api/src: main/java/fr/inra/masc/io main/java/fr/inra/masc/io/parser main/java/fr/inra/masc/io/writer main/java/fr/inra/masc/services main/xmi test/java/fr/inra/masc/services
by sletellier@users.nuiton.org 15 Dec '11
by sletellier@users.nuiton.org 15 Dec '11
15 Dec '11
Author: sletellier
Date: 2011-12-15 11:50:26 +0100 (Thu, 15 Dec 2011)
New Revision: 521
Url: http://nuiton.org/repositories/revision/sandbox/521
Log:
Rename mexico experienceDesign to experimentDesign
Added:
masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java
Removed:
masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java
Modified:
masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
masc/masc-api/src/main/xmi/mexico.zargo
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,7 +1,7 @@
package fr.inra.masc.io;
import fr.ifremer.mexico.model.Domain;
-import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperimentDesign;
import fr.ifremer.mexico.model.Factor;
import fr.ifremer.mexico.model.Feature;
import fr.ifremer.mexico.model.InputDesign;
@@ -15,13 +15,13 @@
*/
public class MexicoXmlConstant {
- public static final String EXPERIMENT_DESIGN = ExperienceDesign.class.getSimpleName().toLowerCase();
- public static final String EXPERIMENT_DESIGN_DATE = ExperienceDesign.PROPERTY_DATE;
- public static final String EXPERIMENT_DESIGN_ID = ExperienceDesign.PROPERTY_ID;
- public static final String EXPERIMENT_DESIGN_AUTHOR = ExperienceDesign.PROPERTY_AUTHOR;
- public static final String EXPERIMENT_DESIGN_LICENCE = ExperienceDesign.PROPERTY_LICENCE;
- public static final String EXPERIMENT_DESIGN_DESCRIPTION = ExperienceDesign.PROPERTY_DESCRIPTION;
- public static final String FACTORS = ExperienceDesign.PROPERTY_FACTORS;
+ public static final String EXPERIMENT_DESIGN = ExperimentDesign.class.getSimpleName().toLowerCase();
+ public static final String EXPERIMENT_DESIGN_DATE = ExperimentDesign.PROPERTY_DATE;
+ public static final String EXPERIMENT_DESIGN_ID = ExperimentDesign.PROPERTY_ID;
+ public static final String EXPERIMENT_DESIGN_AUTHOR = ExperimentDesign.PROPERTY_AUTHOR;
+ public static final String EXPERIMENT_DESIGN_LICENCE = ExperimentDesign.PROPERTY_LICENCE;
+ public static final String EXPERIMENT_DESIGN_DESCRIPTION = ExperimentDesign.PROPERTY_DESCRIPTION;
+ public static final String FACTORS = ExperimentDesign.PROPERTY_FACTORS;
public static final String FACTOR = Factor.class.getSimpleName().toLowerCase();
public static final String FACTOR_ID = Factor.PROPERTY_ID;
public static final String FACTOR_NAME = Factor.PROPERTY_NAME;
Deleted: masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,215 +0,0 @@
-package fr.inra.masc.io.parser;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import fr.ifremer.mexico.model.Domain;
-import fr.ifremer.mexico.model.DomainImpl;
-import fr.ifremer.mexico.model.ExperienceDesign;
-import fr.ifremer.mexico.model.ExperienceDesignImpl;
-import fr.ifremer.mexico.model.Factor;
-import fr.ifremer.mexico.model.FactorImpl;
-import fr.ifremer.mexico.model.Feature;
-import fr.ifremer.mexico.model.FeatureImpl;
-import fr.ifremer.mexico.model.ValueType;
-import fr.inra.masc.MascTechnicalException;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.text.ParseException;
-import java.util.List;
-import java.util.Map;
-
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_LEVEL;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NAME;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_VALUE_TYPE;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_AUTHOR;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DATE;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DESCRIPTION;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_ID;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_LICENCE;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTORS;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_DESCRIPTION;
-import static fr.inra.masc.io.MexicoXmlConstant.FEATURE;
-import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_NAME;
-import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE;
-import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE_TYPE;
-
-/**
-* @author sletellier <letellier(a)codelutin.com>
-*/
-public class ExperienceDesignParser extends MexicoXmlParser<ExperienceDesign> {
-
- protected Map<String, Factor> factors;
-
- public ExperienceDesignParser(File file) throws FileNotFoundException {
- super(file);
- this.factors = Maps.newHashMap();
- }
-
- @Override
- protected ExperienceDesign parseModel(XmlPullParser parser) throws IOException, XmlPullParserException, ParseException {
- ExperienceDesign model = new ExperienceDesignImpl();
-
- parseExperienceDesignMeta(parser, model);
- parseFactors(parser, model);
-
- return model;
- }
-
- protected void parseExperienceDesignMeta(XmlPullParser parser, ExperienceDesign model) throws IOException, XmlPullParserException, ParseException {
-
- // file must start with experiment design tag
- if (parser.nextTag() == XmlPullParser.START_TAG &&
- !parserEqual(parser, EXPERIMENT_DESIGN)) {
- throw new MascTechnicalException("Experiment design file must start with " + EXPERIMENT_DESIGN + " tag");
- }
-
- // parse experiment design id
- String id = parser.getAttributeValue(null, EXPERIMENT_DESIGN_ID);
- model.setId(id);
-
- // parse date
- String dateAsString = parser.getAttributeValue(null, EXPERIMENT_DESIGN_DATE);
- model.setDate(parseDate(dateAsString));
-
- // parse author
- String author = parser.getAttributeValue(null, EXPERIMENT_DESIGN_AUTHOR);
- model.setAuthor(author);
-
- // parse license
- String license = parser.getAttributeValue(null, EXPERIMENT_DESIGN_LICENCE);
- model.setLicence(license);
-
- // parse description
- if (parser.nextTag() == XmlPullParser.START_TAG &&
- parserEqual(parser, EXPERIMENT_DESIGN_DESCRIPTION)) {
-
- model.setDescription(parser.nextText());
-
- // read next tag
- parser.nextTag();
- }
- }
- protected void parseFactors(XmlPullParser parser, ExperienceDesign model) throws IOException, XmlPullParserException {
-
- // factors
- int eventType = parser.getEventType();
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, FACTORS)) {
-
- List<Factor> factors = Lists.newArrayList();
- while (!(parser.nextTag() == XmlPullParser.END_TAG &&
- parserEqual(parser, FACTORS))) {
-
- // factor
- factors.add(parseFactor(parser));
- }
- model.setFactors(factors);
- }
-
- // read experience design next tag
- parser.nextTag();
- }
-
- protected Factor parseFactor(XmlPullParser parser) throws IOException, XmlPullParserException {
-
- Factor factor = new FactorImpl();
-
- // parse description
- int eventType = parser.nextTag();
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, FACTOR_DESCRIPTION)) {
- factor.setDescription(parser.nextText());
-
- // read function close tag
- eventType = parser.nextTag();
- }
-
- // domain
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, DOMAIN)) {
- factor.setDomain(parseDomain(parser));
- }
-
- // features
- if (parser.getEventType() == XmlPullParser.START_TAG &&
- parserEqual(parser, FEATURE)) {
-
- List<Feature> features = Lists.newArrayList();
-
- while (parserEqual(parser, FEATURE)) {
-
- // feature
- features.add(parseFeature(parser));
-
- // read feature close tag
- parser.nextTag();
-
- // read next tag
- parser.nextTag();
- }
- factor.setFeatures(features);
- }
-
- // keep factors
- factors.put(factor.getId(), factor);
-
- return factor;
- }
- protected Domain parseDomain(XmlPullParser parser) throws XmlPullParserException {
- Domain domain = new DomainImpl();
-
- // name
- String name = parser.getAttributeValue(null, DOMAIN_NAME);
- domain.setName(name);
-
- // distributionParameter
- String distributionParameter = parser.getAttributeValue(null, DOMAIN_DISTRIBUTION_PARAMETER);
- domain.setDistributionParameter(distributionParameter);
-
- // level
- String level = parser.getAttributeValue(null, DOMAIN_LEVEL);
- domain.setLevel(Integer.parseInt(level));
-
- // valueType
- String valueType = parser.getAttributeValue(null, DOMAIN_VALUE_TYPE);
- domain.setValueType(ValueType.valueOf(valueType));
-
- // nominaleValue
- // TODO sletellier 20111215 : take care of type
- String nominaleValue = parser.getAttributeValue(null, DOMAIN_NOMINAL_VALUE);
- domain.setNominalValue(nominaleValue);
-
- return domain;
- }
-
- protected Feature parseFeature(XmlPullParser parser) {
- Feature feature = new FeatureImpl();
-
- // name
- String name = parser.getAttributeValue(null, FEATURE_NAME);
- feature.setName(name);
-
- // value
- // TODO sletellier 20111215 : take care of type
- String value = parser.getAttributeValue(null, FEATURE_VALUE);
- feature.setValue(value);
-
- // value type
- String valueType = parser.getAttributeValue(null, FEATURE_VALUE_TYPE);
- feature.setValueType(ValueType.valueOf(valueType));
-
- return feature;
- }
-
- public Map<String, Factor> getFactors() {
- return factors;
- }
-}
Copied: masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java (from rev 520, masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java)
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperimentDesignParser.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -0,0 +1,215 @@
+package fr.inra.masc.io.parser;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.mexico.model.Domain;
+import fr.ifremer.mexico.model.DomainImpl;
+import fr.ifremer.mexico.model.ExperimentDesign;
+import fr.ifremer.mexico.model.ExperimentDesignImpl;
+import fr.ifremer.mexico.model.Factor;
+import fr.ifremer.mexico.model.FactorImpl;
+import fr.ifremer.mexico.model.Feature;
+import fr.ifremer.mexico.model.FeatureImpl;
+import fr.ifremer.mexico.model.ValueType;
+import fr.inra.masc.MascTechnicalException;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_LEVEL;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_VALUE_TYPE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_AUTHOR;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DATE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_ID;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_LICENCE;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTORS;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE_TYPE;
+
+/**
+* @author sletellier <letellier(a)codelutin.com>
+*/
+public class ExperimentDesignParser extends MexicoXmlParser<ExperimentDesign> {
+
+ protected Map<String, Factor> factors;
+
+ public ExperimentDesignParser(File file) throws FileNotFoundException {
+ super(file);
+ this.factors = Maps.newHashMap();
+ }
+
+ @Override
+ protected ExperimentDesign parseModel(XmlPullParser parser) throws IOException, XmlPullParserException, ParseException {
+ ExperimentDesign model = new ExperimentDesignImpl();
+
+ parseExperimentDesignMeta(parser, model);
+ parseFactors(parser, model);
+
+ return model;
+ }
+
+ protected void parseExperimentDesignMeta(XmlPullParser parser, ExperimentDesign model) throws IOException, XmlPullParserException, ParseException {
+
+ // file must start with experiment design tag
+ if (parser.nextTag() == XmlPullParser.START_TAG &&
+ !parserEqual(parser, EXPERIMENT_DESIGN)) {
+ throw new MascTechnicalException("Experiment design file must start with " + EXPERIMENT_DESIGN + " tag");
+ }
+
+ // parse experiment design id
+ String id = parser.getAttributeValue(null, EXPERIMENT_DESIGN_ID);
+ model.setId(id);
+
+ // parse date
+ String dateAsString = parser.getAttributeValue(null, EXPERIMENT_DESIGN_DATE);
+ model.setDate(parseDate(dateAsString));
+
+ // parse author
+ String author = parser.getAttributeValue(null, EXPERIMENT_DESIGN_AUTHOR);
+ model.setAuthor(author);
+
+ // parse license
+ String license = parser.getAttributeValue(null, EXPERIMENT_DESIGN_LICENCE);
+ model.setLicence(license);
+
+ // parse description
+ if (parser.nextTag() == XmlPullParser.START_TAG &&
+ parserEqual(parser, EXPERIMENT_DESIGN_DESCRIPTION)) {
+
+ model.setDescription(parser.nextText());
+
+ // read next tag
+ parser.nextTag();
+ }
+ }
+ protected void parseFactors(XmlPullParser parser, ExperimentDesign model) throws IOException, XmlPullParserException {
+
+ // factors
+ int eventType = parser.getEventType();
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FACTORS)) {
+
+ List<Factor> factors = Lists.newArrayList();
+ while (!(parser.nextTag() == XmlPullParser.END_TAG &&
+ parserEqual(parser, FACTORS))) {
+
+ // factor
+ factors.add(parseFactor(parser));
+ }
+ model.setFactors(factors);
+ }
+
+ // read experience design next tag
+ parser.nextTag();
+ }
+
+ protected Factor parseFactor(XmlPullParser parser) throws IOException, XmlPullParserException {
+
+ Factor factor = new FactorImpl();
+
+ // parse description
+ int eventType = parser.nextTag();
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FACTOR_DESCRIPTION)) {
+ factor.setDescription(parser.nextText());
+
+ // read function close tag
+ eventType = parser.nextTag();
+ }
+
+ // domain
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, DOMAIN)) {
+ factor.setDomain(parseDomain(parser));
+ }
+
+ // features
+ if (parser.getEventType() == XmlPullParser.START_TAG &&
+ parserEqual(parser, FEATURE)) {
+
+ List<Feature> features = Lists.newArrayList();
+
+ while (parserEqual(parser, FEATURE)) {
+
+ // feature
+ features.add(parseFeature(parser));
+
+ // read feature close tag
+ parser.nextTag();
+
+ // read next tag
+ parser.nextTag();
+ }
+ factor.setFeatures(features);
+ }
+
+ // keep factors
+ factors.put(factor.getId(), factor);
+
+ return factor;
+ }
+ protected Domain parseDomain(XmlPullParser parser) throws XmlPullParserException {
+ Domain domain = new DomainImpl();
+
+ // name
+ String name = parser.getAttributeValue(null, DOMAIN_NAME);
+ domain.setName(name);
+
+ // distributionParameter
+ String distributionParameter = parser.getAttributeValue(null, DOMAIN_DISTRIBUTION_PARAMETER);
+ domain.setDistributionParameter(distributionParameter);
+
+ // level
+ String level = parser.getAttributeValue(null, DOMAIN_LEVEL);
+ domain.setLevel(Integer.parseInt(level));
+
+ // valueType
+ String valueType = parser.getAttributeValue(null, DOMAIN_VALUE_TYPE);
+ domain.setValueType(ValueType.valueOf(valueType));
+
+ // nominaleValue
+ // TODO sletellier 20111215 : take care of type
+ String nominaleValue = parser.getAttributeValue(null, DOMAIN_NOMINAL_VALUE);
+ domain.setNominalValue(nominaleValue);
+
+ return domain;
+ }
+
+ protected Feature parseFeature(XmlPullParser parser) {
+ Feature feature = new FeatureImpl();
+
+ // name
+ String name = parser.getAttributeValue(null, FEATURE_NAME);
+ feature.setName(name);
+
+ // value
+ // TODO sletellier 20111215 : take care of type
+ String value = parser.getAttributeValue(null, FEATURE_VALUE);
+ feature.setValue(value);
+
+ // value type
+ String valueType = parser.getAttributeValue(null, FEATURE_VALUE_TYPE);
+ feature.setValueType(ValueType.valueOf(valueType));
+
+ return feature;
+ }
+
+ public Map<String, Factor> getFactors() {
+ return factors;
+ }
+}
Modified: masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -2,7 +2,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperimentDesign;
import fr.ifremer.mexico.model.Factor;
import fr.ifremer.mexico.model.InputDesign;
import fr.ifremer.mexico.model.InputDesignImpl;
@@ -32,11 +32,11 @@
*/
public class InputDesignParser extends MexicoXmlParser<InputDesign> {
- protected ExperienceDesignParser experienceDesignParser;
+ protected ExperimentDesignParser experimentDesignParser;
public InputDesignParser(File file) throws FileNotFoundException {
super(file);
- experienceDesignParser = new ExperienceDesignParser(file);
+ experimentDesignParser = new ExperimentDesignParser(file);
}
@Override
@@ -46,8 +46,8 @@
parseInputDesignMeta(parser, model);
// parse experiment design
- ExperienceDesign experienceDesign = experienceDesignParser.parseModel(parser);
- model.setExperienceDesign(experienceDesign);
+ ExperimentDesign experimentDesign = experimentDesignParser.parseModel(parser);
+ model.setExperimentDesign(experimentDesign);
parseScenarios(parser, model);
@@ -105,7 +105,7 @@
// get factor
String factorId = parser.getAttributeValue(null, FACTOR);
- Factor factor = experienceDesignParser.getFactors().get(factorId);
+ Factor factor = experimentDesignParser.getFactors().get(factorId);
// factor value
String value = parser.nextText();
Deleted: masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,113 +0,0 @@
-package fr.inra.masc.io.writer;
-
-import fr.ifremer.mexico.model.Domain;
-import fr.ifremer.mexico.model.ExperienceDesign;
-import fr.ifremer.mexico.model.Factor;
-import org.apache.commons.lang3.StringUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Date;
-
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_LEVEL;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NAME;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE;
-import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_VALUE_TYPE;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_AUTHOR;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DATE;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DESCRIPTION;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_ID;
-import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_LICENCE;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTOR;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTORS;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_DESCRIPTION;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_ID;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_NAME;
-import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_UNIT;
-
-/**
- * Writer to create experiment design file with {@link ExperienceDesign} model
- *
- * @author sletellier <letellier(a)codelutin.com>
- * @since 0.1
- */
-public class ExperienceDesignXmlWriter extends MexicoXmlWriter<ExperienceDesign> {
-
- public ExperienceDesignXmlWriter(File file, ExperienceDesign model) throws IOException {
- super(file, model);
- }
-
- @Override
- public XmlNode getRootElement() {
-
- XmlNode rootXmlNode = new XmlNode(EXPERIMENT_DESIGN);
- composeExperienceDesignMeta(rootXmlNode);
- composeFactors(rootXmlNode);
-
- // TODO sletellier 2011/12/14 : implement workflow
- // composeWorkFlow(rootXmlNode);
-
- return rootXmlNode;
- }
-
- protected void composeExperienceDesignMeta(XmlNode rootXmlNode) {
-
- // date
- Date date = model.getDate();
- addParameter(rootXmlNode, EXPERIMENT_DESIGN_DATE, formatDate(date));
-
- addParameter(rootXmlNode, EXPERIMENT_DESIGN_ID, model.getId());
- addParameter(rootXmlNode, EXPERIMENT_DESIGN_AUTHOR, model.getAuthor());
- addParameter(rootXmlNode, EXPERIMENT_DESIGN_LICENCE, model.getLicence());
-
- // description
- String description = model.getDescription();
- if (StringUtils.isNotEmpty(description)) {
- XmlNode.createElement(rootXmlNode, EXPERIMENT_DESIGN_DESCRIPTION, description);
- }
- }
-
- protected void composeFactors(XmlNode rootXmlNode) {
- Collection<Factor> factors = model.getFactors();
-
- // do nothing if no factors in model
- if (factors.isEmpty()) {
- return;
- }
-
- // creating factors node
- XmlNode factorsXmlNode = XmlNode.createElement(rootXmlNode, FACTORS);
- for (Factor factor : factors) {
-
- // factor
- XmlNode factorXmlNode = XmlNode.createElement(factorsXmlNode, FACTOR);
- addParameter(factorXmlNode, FACTOR_ID, factor.getId());
- addParameter(factorXmlNode, FACTOR_NAME, factor.getName());
- addParameter(factorXmlNode, FACTOR_UNIT, factor.getUnit());
-
- // description
- String description = model.getDescription();
- if (StringUtils.isNotEmpty(description)) {
- XmlNode.createElement(factorXmlNode, FACTOR_DESCRIPTION, factor.getDescription());
- }
-
- // domain
- Domain domain = factor.getDomain();
- if (domain != null) {
- XmlNode domainXmlNode = XmlNode.createElement(factorXmlNode, DOMAIN);
- addParameter(domainXmlNode, DOMAIN_NAME, domain.getName());
- addParameter(domainXmlNode, DOMAIN_DISTRIBUTION_PARAMETER, domain.getDistributionParameter());
- addParameter(domainXmlNode, DOMAIN_LEVEL, String.valueOf(domain.getLevel()));
- addParameter(domainXmlNode, DOMAIN_VALUE_TYPE, domain.getValueType());
- addParameter(domainXmlNode, DOMAIN_NOMINAL_VALUE, domain.getNominalValue());
- }
-
- // features
- addAllFeature(factorXmlNode, factor.getFeatures());
- }
- }
-}
Copied: masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java (from rev 520, masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java)
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperimentDesignXmlWriter.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -0,0 +1,113 @@
+package fr.inra.masc.io.writer;
+
+import fr.ifremer.mexico.model.Domain;
+import fr.ifremer.mexico.model.ExperimentDesign;
+import fr.ifremer.mexico.model.Factor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Date;
+
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_LEVEL;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_VALUE_TYPE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_AUTHOR;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DATE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_ID;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_LICENCE;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTORS;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_ID;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_UNIT;
+
+/**
+ * Writer to create experiment design file with {@link ExperimentDesign} model
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class ExperimentDesignXmlWriter extends MexicoXmlWriter<ExperimentDesign> {
+
+ public ExperimentDesignXmlWriter(File file, ExperimentDesign model) throws IOException {
+ super(file, model);
+ }
+
+ @Override
+ public XmlNode getRootElement() {
+
+ XmlNode rootXmlNode = new XmlNode(EXPERIMENT_DESIGN);
+ composeExperimentDesignMeta(rootXmlNode);
+ composeFactors(rootXmlNode);
+
+ // TODO sletellier 2011/12/14 : implement workflow
+ // composeWorkFlow(rootXmlNode);
+
+ return rootXmlNode;
+ }
+
+ protected void composeExperimentDesignMeta(XmlNode rootXmlNode) {
+
+ // date
+ Date date = model.getDate();
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_DATE, formatDate(date));
+
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_ID, model.getId());
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_AUTHOR, model.getAuthor());
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_LICENCE, model.getLicence());
+
+ // description
+ String description = model.getDescription();
+ if (StringUtils.isNotEmpty(description)) {
+ XmlNode.createElement(rootXmlNode, EXPERIMENT_DESIGN_DESCRIPTION, description);
+ }
+ }
+
+ protected void composeFactors(XmlNode rootXmlNode) {
+ Collection<Factor> factors = model.getFactors();
+
+ // do nothing if no factors in model
+ if (factors.isEmpty()) {
+ return;
+ }
+
+ // creating factors node
+ XmlNode factorsXmlNode = XmlNode.createElement(rootXmlNode, FACTORS);
+ for (Factor factor : factors) {
+
+ // factor
+ XmlNode factorXmlNode = XmlNode.createElement(factorsXmlNode, FACTOR);
+ addParameter(factorXmlNode, FACTOR_ID, factor.getId());
+ addParameter(factorXmlNode, FACTOR_NAME, factor.getName());
+ addParameter(factorXmlNode, FACTOR_UNIT, factor.getUnit());
+
+ // description
+ String description = model.getDescription();
+ if (StringUtils.isNotEmpty(description)) {
+ XmlNode.createElement(factorXmlNode, FACTOR_DESCRIPTION, factor.getDescription());
+ }
+
+ // domain
+ Domain domain = factor.getDomain();
+ if (domain != null) {
+ XmlNode domainXmlNode = XmlNode.createElement(factorXmlNode, DOMAIN);
+ addParameter(domainXmlNode, DOMAIN_NAME, domain.getName());
+ addParameter(domainXmlNode, DOMAIN_DISTRIBUTION_PARAMETER, domain.getDistributionParameter());
+ addParameter(domainXmlNode, DOMAIN_LEVEL, String.valueOf(domain.getLevel()));
+ addParameter(domainXmlNode, DOMAIN_VALUE_TYPE, domain.getValueType());
+ addParameter(domainXmlNode, DOMAIN_NOMINAL_VALUE, domain.getNominalValue());
+ }
+
+ // features
+ addAllFeature(factorXmlNode, factor.getFeatures());
+ }
+ }
+}
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,8 +1,8 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperimentDesign;
import fr.ifremer.mexico.model.InputDesign;
-import fr.inra.masc.io.parser.ExperienceDesignParser;
+import fr.inra.masc.io.parser.ExperimentDesignParser;
import fr.inra.masc.io.parser.InputDesignParser;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -26,29 +26,29 @@
return log;
}
- public ExperienceDesign loadExperienceDesignModel(File experienceDesignFile) {
+ public ExperimentDesign loadExperimentDesignModel(File experimentDesignFile) {
- ExperienceDesign experienceDesignModel = null;
+ ExperimentDesign experimentDesign = null;
try {
- ExperienceDesignParser experienceDesignParser = new ExperienceDesignParser(experienceDesignFile);
+ ExperimentDesignParser experimentDesignParser = new ExperimentDesignParser(experimentDesignFile);
try {
- // parse experienceDesign
- experienceDesignModel = experienceDesignParser.getModel();
+ // parse experimentDesign
+ experimentDesign = experimentDesignParser.getModel();
} finally {
- experienceDesignParser.close();
+ experimentDesignParser.close();
}
} catch (XmlPullParserException eee) {
- throwMascTechnicalException("Failed to parse ExperienceDesign file '" + experienceDesignFile.getName() + "'", eee);
+ throwMascTechnicalException("Failed to parse ExperimentDesign file '" + experimentDesignFile.getName() + "'", eee);
} catch (FileNotFoundException eee) {
- throwMascTechnicalException("ExperienceDesign file '" + experienceDesignFile.getName() + "' not found", eee);
+ throwMascTechnicalException("ExperimentDesign file '" + experimentDesignFile.getName() + "' not found", eee);
} catch (IOException eee) {
- throwMascTechnicalException("Error reading ExperienceDesign file '" + experienceDesignFile.getName() + "'", eee);
+ throwMascTechnicalException("Error reading ExperimentDesign file '" + experimentDesignFile.getName() + "'", eee);
} catch (ParseException eee) {
- throwMascTechnicalException("Failed to parse ExperienceDesign file '" + experienceDesignFile.getName() + "'", eee);
+ throwMascTechnicalException("Failed to parse ExperimentDesign file '" + experimentDesignFile.getName() + "'", eee);
}
- return experienceDesignModel;
+ return experimentDesign;
}
public InputDesign loadInputDesignDesignModel(File inputDesignFile) {
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -2,8 +2,8 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import fr.ifremer.mexico.model.ExperienceDesign;
-import fr.ifremer.mexico.model.ExperienceDesignImpl;
+import fr.ifremer.mexico.model.ExperimentDesign;
+import fr.ifremer.mexico.model.ExperimentDesignImpl;
import fr.ifremer.mexico.model.Factor;
import fr.ifremer.mexico.model.FactorImpl;
import fr.ifremer.mexico.model.Feature;
@@ -42,11 +42,11 @@
return log;
}
- public InputDesign convertMascModelToMexicoInputDesignModel(MascModel mascModel, ExperienceDesign experienceDesign) {
+ public InputDesign convertMascModelToMexicoInputDesignModel(MascModel mascModel, ExperimentDesign experimentDesign) {
InputDesign inputDesign = new InputDesignImpl();
// experience design
- inputDesign.setExperienceDesign(experienceDesign);
+ inputDesign.setExperimentDesign(experimentDesign);
// date is now
inputDesign.setDate(new Date());
@@ -70,7 +70,7 @@
// optionValue = entry of factorValues
for (OptionValue optionValue : option.getOptionValue()) {
- Collection<Factor> factors = experienceDesign.getFactors();
+ Collection<Factor> factors = experimentDesign.getFactors();
for (Factor factor : factors) {
String criteriaName = optionValue.getCriteria().getName();
if (factor.getId().equals(criteriaName)) {
@@ -87,18 +87,18 @@
return inputDesign;
}
- public ExperienceDesign convertMascModelToMexicoExperienceDesignModel(MascModel mascModel) {
- ExperienceDesign experienceDesign = new ExperienceDesignImpl();
+ public ExperimentDesign convertMascModelToMexicoExperimentDesignModel(MascModel mascModel) {
+ ExperimentDesign experimentDesign = new ExperimentDesignImpl();
// id = mascModel name
- experienceDesign.setId(mascModel.getName());
+ experimentDesign.setId(mascModel.getName());
// description
String description = StringUtils.join(mascModel.getDescription(), "\n");
- experienceDesign.setDescription(description);
+ experimentDesign.setDescription(description);
// date is now
- experienceDesign.setDate(new Date());
+ experimentDesign.setDate(new Date());
// criterias = factors
Collection<Criteria> criterias = mascModel.getCriteria();
@@ -107,9 +107,9 @@
for (Criteria criteria : criterias) {
factors.addAll(getFactors(criteria));
}
- experienceDesign.setFactors(factors);
+ experimentDesign.setFactors(factors);
- return experienceDesign;
+ return experimentDesign;
}
protected Collection<Factor> getFactors(Criteria criteria) {
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,8 +1,8 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperimentDesign;
import fr.ifremer.mexico.model.InputDesign;
-import fr.inra.masc.io.writer.ExperienceDesignXmlWriter;
+import fr.inra.masc.io.writer.ExperimentDesignXmlWriter;
import fr.inra.masc.io.writer.InputDesignXmlWriter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -26,10 +26,10 @@
return log;
}
- public void saveExperienceDesign(ExperienceDesign experienceDesign, File toSave) {
+ public void saveExperimentDesign(ExperimentDesign experimentDesign, File toSave) {
try {
- ExperienceDesignXmlWriter writer = new ExperienceDesignXmlWriter(toSave, experienceDesign);
+ ExperimentDesignXmlWriter writer = new ExperimentDesignXmlWriter(toSave, experimentDesign);
try {
writer.write();
} finally {
Modified: masc/masc-api/src/main/xmi/mexico.zargo
===================================================================
(Binary files differ)
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,6 +1,6 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperimentDesign;
import fr.ifremer.mexico.model.InputDesign;
import fr.inra.masc.model.MascModel;
import org.junit.Test;
@@ -14,17 +14,17 @@
public class MexicoLoadModelServiceTest extends AbstractServiceTest {
@Test
- public void testLoadExperienceDesignModel() throws Exception {
+ public void testLoadExperimentDesignModel() throws Exception {
MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
File dexiTestFile = getDexiTestFile();
MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
- ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
+ ExperimentDesign experimentDesign = mexicoModelConvertorService.convertMascModelToMexicoExperimentDesignModel(mascModel);
- File savedFile = new File(testWorkDir, "experienceDesignTestFileResult.xml");
- getService(MexicoSaveModelService.class).saveExperienceDesign(experienceDesign, savedFile);
+ File savedFile = new File(testWorkDir, "experimentDesignTestFileResult.xml");
+ getService(MexicoSaveModelService.class).saveExperimentDesign(experimentDesign, savedFile);
- ExperienceDesign loadedExperienceDesign = getService(MexicoLoadModelService.class).loadExperienceDesignModel(savedFile);
- assertExperimentDesignEqual(experienceDesign, loadedExperienceDesign);
+ ExperimentDesign loadedExperimentDesign = getService(MexicoLoadModelService.class).loadExperimentDesignModel(savedFile);
+ assertExperimentDesignEqual(experimentDesign, loadedExperimentDesign);
}
@Test
@@ -32,20 +32,20 @@
File dexiTestFile = getDexiTestFile();
MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
- ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
- InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experienceDesign);
+ ExperimentDesign experimentDesign = mexicoModelConvertorService.convertMascModelToMexicoExperimentDesignModel(mascModel);
+ InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experimentDesign);
File savedFile = new File(testWorkDir, "inputDesignTestFileResult.xml");
getService(MexicoSaveModelService.class).saveInputDesign(inputDesign, savedFile);
InputDesign loadedInputDesign = getService(MexicoLoadModelService.class).loadInputDesignDesignModel(savedFile);
- assertExperimentDesignEqual(inputDesign.getExperienceDesign(), loadedInputDesign.getExperienceDesign());
+ assertExperimentDesignEqual(inputDesign.getExperimentDesign(), loadedInputDesign.getExperimentDesign());
assertEquals(inputDesign.getScenarios().size(), loadedInputDesign.getScenarios().size());
}
- protected void assertExperimentDesignEqual(ExperienceDesign expectedExperienceDesign, ExperienceDesign experienceDesign) {
- assertEquals(expectedExperienceDesign.getId(), experienceDesign.getId());
- assertEquals(expectedExperienceDesign.getFactors().size(), experienceDesign.getFactors().size());
+ protected void assertExperimentDesignEqual(ExperimentDesign expectedExperimentDesign, ExperimentDesign experimentDesign) {
+ assertEquals(expectedExperimentDesign.getId(), experimentDesign.getId());
+ assertEquals(expectedExperimentDesign.getFactors().size(), experimentDesign.getFactors().size());
}
}
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,6 +1,6 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperimentDesign;
import fr.ifremer.mexico.model.InputDesign;
import fr.ifremer.mexico.model.Scenario;
import fr.inra.masc.model.Criteria;
@@ -20,11 +20,11 @@
public class MexicoModelConvertorServiceTest extends AbstractServiceTest {
@Test
- public void testConvertMascModelToMexicoExperienceDesignModel() throws Exception {
+ public void testConvertMascModelToMexicoExperimentDesignModel() throws Exception {
MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
File dexiTestFile = getDexiTestFile();
MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
- ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
+ ExperimentDesign experimentDesign = mexicoModelConvertorService.convertMascModelToMexicoExperimentDesignModel(mascModel);
// count masc model criteria
Collection<Criteria> criterias = mascModel.getCriteria();
@@ -32,7 +32,7 @@
for (Criteria criteria : criterias) {
count += countChildren(criteria);
}
- assertEquals(count, experienceDesign.getFactors().size());
+ assertEquals(count, experimentDesign.getFactors().size());
}
protected int countChildren(Criteria criteria) {
@@ -53,8 +53,8 @@
File dexiTestFile = getDexiTestFile();
MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
- ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
- InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experienceDesign);
+ ExperimentDesign experimentDesign = mexicoModelConvertorService.convertMascModelToMexicoExperimentDesignModel(mascModel);
+ InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experimentDesign);
Collection<Option> options = mascModel.getOption();
assertEquals(options.size(), inputDesign.getScenarios().size());
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java 2011-12-15 10:31:40 UTC (rev 520)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java 2011-12-15 10:50:26 UTC (rev 521)
@@ -1,6 +1,6 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperimentDesign;
import fr.ifremer.mexico.model.InputDesign;
import fr.inra.masc.model.MascModel;
import org.junit.Test;
@@ -14,14 +14,14 @@
public class MexicoSaveModelServiceTest extends AbstractServiceTest {
@Test
- public void testSaveExperienceDesign() throws Exception {
+ public void testSaveExperimentDesign() throws Exception {
MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
File dexiTestFile = getDexiTestFile();
MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
- ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
+ ExperimentDesign experimentDesign = mexicoModelConvertorService.convertMascModelToMexicoExperimentDesignModel(mascModel);
- File savedFile = new File(testWorkDir, "experienceDesignTestFileResult.xml");
- getService(MexicoSaveModelService.class).saveExperienceDesign(experienceDesign, savedFile);
+ File savedFile = new File(testWorkDir, "experimentDesignTestFileResult.xml");
+ getService(MexicoSaveModelService.class).saveExperimentDesign(experimentDesign, savedFile);
}
@Test
@@ -29,8 +29,8 @@
File dexiTestFile = getDexiTestFile();
MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
- ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
- InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experienceDesign);
+ ExperimentDesign experimentDesign = mexicoModelConvertorService.convertMascModelToMexicoExperimentDesignModel(mascModel);
+ InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experimentDesign);
File savedFile = new File(testWorkDir, "inputDesignTestFileResult.xml");
getService(MexicoSaveModelService.class).saveInputDesign(inputDesign, savedFile);
1
0
r520 - in masc/masc-api/src: main/java/fr/inra/masc/io main/java/fr/inra/masc/io/parser main/java/fr/inra/masc/io/writer main/java/fr/inra/masc/model main/java/fr/inra/masc/services test/java/fr/inra/masc/services
by sletellier@users.nuiton.org 15 Dec '11
by sletellier@users.nuiton.org 15 Dec '11
15 Dec '11
Author: sletellier
Date: 2011-12-15 11:31:40 +0100 (Thu, 15 Dec 2011)
New Revision: 520
Url: http://nuiton.org/repositories/revision/sandbox/520
Log:
- Parse mexico xml files (inputDesign and experimentDesign)
- Add test parsing mexico xml files
- Refactor creating specific writer and parser
- Rename Element to XmlNode
Added:
masc/masc-api/src/main/java/fr/inra/masc/io/DateFormatFactory.java
masc/masc-api/src/main/java/fr/inra/masc/io/MascXmlConstant.java
masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/
masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/MascModelParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/MexicoXmlParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/
masc/masc-api/src/main/java/fr/inra/masc/io/writer/DexiXmlWriter.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlNode.java
masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlWriter.java
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java
Removed:
masc/masc-api/src/main/java/fr/inra/masc/io/Element.java
masc/masc-api/src/main/java/fr/inra/masc/model/MascXmlConstant.java
Modified:
masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
Added: masc/masc-api/src/main/java/fr/inra/masc/io/DateFormatFactory.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/DateFormatFactory.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/DateFormatFactory.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,21 @@
+package fr.inra.masc.io;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+/**
+ * @author sletellier <letellier(a)codelutin.com>
+ */
+public class DateFormatFactory {
+
+ public static final String MEXICO_DATE_PATTERN = "yyyy-MM-dd";
+ protected static DateFormat mexicoDateFormat;
+
+ public static DateFormat getMexicoDateFormat() {
+ // singleton
+ if (mexicoDateFormat == null) {
+ mexicoDateFormat = new SimpleDateFormat(MEXICO_DATE_PATTERN);
+ }
+ return mexicoDateFormat;
+ }
+}
Deleted: masc/masc-api/src/main/java/fr/inra/masc/io/Element.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/Element.java 2011-12-14 15:37:31 UTC (rev 519)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/Element.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -1,115 +0,0 @@
-package fr.inra.masc.io;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.commons.lang3.StringEscapeUtils;
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Represent an XML node
- *
- * @author sletellier <letellier(a)codelutin.com>
- * @since 0.1
- */
-public class Element {
-
- public static final String XML_META = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
- public static final String CLOSED_TAG = "%s<%s%s/>\n";
- public static final String START_TAG = "%s<%s%s>";
- public static final String END_TAG = "%s</%s>\n";
-
- protected LinkedList<Element> children;
- protected Map<String, String> parameters;
- protected String tagName;
- protected String text;
-
- public Element(String tagName) {
- this(tagName, null);
- }
-
- public Element(String tagName, String text) {
- this.tagName = tagName;
- this.text = text;
- this.children = Lists.newLinkedList();
- this.parameters = Maps.newHashMap();
- }
-
- public void add(Element e) {
- this.children.add(e);
- }
-
- public void addParameter(String name, String value) {
- this.parameters.put(name, value);
- }
-
- public String toXml(int indent) {
- StringBuilder stringBuilder = new StringBuilder(XML_META).append("\n");
- buildXml(-indent, indent, stringBuilder);
- return stringBuilder.toString();
- }
-
- protected void buildXml(int start, int indent, StringBuilder stringBuilder) {
-
- // closed tag if content is empty
- if (children.isEmpty() && StringUtils.isEmpty(text)) {
- addToBuilder(stringBuilder, CLOSED_TAG, getIndentPrefix(start, indent), tagName);
- return;
- }
-
- // start tag
- addToBuilder(stringBuilder, START_TAG, getIndentPrefix(start, indent), tagName);
- if (StringUtils.isNotEmpty(text)) {
-
- // end inline tag
- addToBuilder(stringBuilder, END_TAG, StringEscapeUtils.escapeXml(text), tagName);
- } else {
- stringBuilder.append("\n");
- for (Element child : children) {
- child.buildXml(start + indent, indent, stringBuilder);
- }
- // end tag
- addToBuilder(stringBuilder, END_TAG, getIndentPrefix(start, indent), tagName);
- }
- }
-
- protected void addToBuilder(StringBuilder stringBuilder, String template, String prefix, String tagName) {
- stringBuilder.append(String.format(template, prefix, tagName, getParametersAsString()));
- }
-
- protected String getIndentPrefix(int start, int lenght) {
- String result = "";
- for (int i=0;i<start + lenght;i++) {
- result += " ";
- }
- return result;
- }
-
- protected String getParametersAsString() {
- StringBuilder builder = new StringBuilder();
- Set<Map.Entry<String,String>> entries = parameters.entrySet();
- for (Map.Entry<String,String> entry : entries) {
-
- // add to builder param like : name="value"
- builder.append(" ").append(entry.getKey()).append("=\"").append(entry.getValue()).append("\"");
- }
- return builder.toString();
- }
-
- public static Element createElement(Element parentElement, String tagName) {
- return createElement(parentElement, tagName, null);
- }
-
- public static Element createElement(Element parentElement, String tagName, String text) {
- Element element = createElement(tagName, text);
- parentElement.add(element);
- return element;
- }
-
- public static Element createElement(String tagName, String text) {
- return new Element(tagName, text);
- }
-}
Copied: masc/masc-api/src/main/java/fr/inra/masc/io/MascXmlConstant.java (from rev 516, masc/masc-api/src/main/java/fr/inra/masc/model/MascXmlConstant.java)
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/MascXmlConstant.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/MascXmlConstant.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,36 @@
+package fr.inra.masc.io;
+
+import fr.inra.masc.model.ComputableCriteria;
+import fr.inra.masc.model.Criteria;
+import fr.inra.masc.model.Function;
+import fr.inra.masc.model.MascModel;
+import fr.inra.masc.model.ScaleValue;
+
+/**
+ * Regroup all masc xml constants tags
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class MascXmlConstant {
+
+ public static final String DEXI = "DEXi";
+ public static final String LINE = "line";
+ public static final String ATTRIBUTE = "attribute";
+ public static final String MODEL_NAME = MascModel.PROPERTY_NAME;
+ public static final String MODEL_DESCRIPTION = MascModel.PROPERTY_DESCRIPTION;
+ public static final String OPTION = MascModel.PROPERTY_OPTION;
+ public static final String SETTINGS = MascModel.PROPERTY_SETTINGS;
+ public static final String CRITERIA_NAME = Criteria.PROPERTY_NAME;
+ public static final String CRITERIA_DESCRIPTION = Criteria.PROPERTY_DESCRIPTION;
+ public static final String SCALE = Criteria.PROPERTY_SCALE;
+ public static final String SCALE_VALUE = ScaleValue.class.getSimpleName();
+ public static final String SCALE_VALUE_NAME = ScaleValue.PROPERTY_NAME;
+ public static final String SCALE_VALUE_DESCRIPTION = ScaleValue.PROPERTY_DESCRIPTION;
+ public static final String SCALE_VALUE_GROUP = ScaleValue.PROPERTY_GROUP;
+ public static final String FUNCTION = ComputableCriteria.PROPERTY_FUNCTION;
+ public static final String FUNCTION_LOW = Function.PROPERTY_LOW;
+ public static final String FUNCTION_ENTERED = Function.PROPERTY_ENTERED;
+ public static final String FUNCTION_WEIGHTS = Function.PROPERTY_WEIGHTS;
+ public static final String FUNCTION_CONSIST = Function.PROPERTY_CONSIST;
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/MexicoXmlConstant.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,46 @@
+package fr.inra.masc.io;
+
+import fr.ifremer.mexico.model.Domain;
+import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.Factor;
+import fr.ifremer.mexico.model.Feature;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.ifremer.mexico.model.Scenario;
+
+/**
+ * Regroup all mexico xml constants tags
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class MexicoXmlConstant {
+
+ public static final String EXPERIMENT_DESIGN = ExperienceDesign.class.getSimpleName().toLowerCase();
+ public static final String EXPERIMENT_DESIGN_DATE = ExperienceDesign.PROPERTY_DATE;
+ public static final String EXPERIMENT_DESIGN_ID = ExperienceDesign.PROPERTY_ID;
+ public static final String EXPERIMENT_DESIGN_AUTHOR = ExperienceDesign.PROPERTY_AUTHOR;
+ public static final String EXPERIMENT_DESIGN_LICENCE = ExperienceDesign.PROPERTY_LICENCE;
+ public static final String EXPERIMENT_DESIGN_DESCRIPTION = ExperienceDesign.PROPERTY_DESCRIPTION;
+ public static final String FACTORS = ExperienceDesign.PROPERTY_FACTORS;
+ public static final String FACTOR = Factor.class.getSimpleName().toLowerCase();
+ public static final String FACTOR_ID = Factor.PROPERTY_ID;
+ public static final String FACTOR_NAME = Factor.PROPERTY_NAME;
+ public static final String FACTOR_UNIT = Factor.PROPERTY_UNIT;
+ public static final String FACTOR_DESCRIPTION = Factor.PROPERTY_DESCRIPTION;
+ public static final String DOMAIN = Factor.PROPERTY_DOMAIN;
+ public static final String DOMAIN_NAME = Domain.PROPERTY_NAME;
+ public static final String DOMAIN_DISTRIBUTION_PARAMETER = Domain.PROPERTY_DISTRIBUTION_PARAMETER;
+ public static final String DOMAIN_LEVEL = Domain.PROPERTY_LEVEL;
+ public static final String DOMAIN_VALUE_TYPE = Domain.PROPERTY_VALUE_TYPE;
+ public static final String DOMAIN_NOMINAL_VALUE = Domain.PROPERTY_NOMINAL_VALUE;
+ public static final String FEATURE = Feature.class.getSimpleName().toLowerCase();
+ public static final String FEATURE_NAME = Feature.PROPERTY_NAME;
+ public static final String FEATURE_VALUE = Feature.PROPERTY_VALUE;
+ public static final String FEATURE_VALUE_TYPE = Feature.PROPERTY_VALUE_TYPE;
+ public static final String INPUT_DESIGN = InputDesign.class.getSimpleName().toLowerCase();
+ public static final String INPUT_DESIGN_DATE = InputDesign.PROPERTY_DATE;
+ public static final String SCENARIO = Scenario.class.getSimpleName().toLowerCase();
+ public static final String SCENARIO_NAME = Scenario.PROPERTY_NAME;
+ public static final String SCENARIO_ORDER_NUMBER = Scenario.PROPERTY_ORDER_NUMBER;
+ public static final String SCENARIO_FACTOR_VALUES = Scenario.PROPERTY_FACTOR_VALUES;
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/ExperienceDesignParser.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,215 @@
+package fr.inra.masc.io.parser;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.mexico.model.Domain;
+import fr.ifremer.mexico.model.DomainImpl;
+import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperienceDesignImpl;
+import fr.ifremer.mexico.model.Factor;
+import fr.ifremer.mexico.model.FactorImpl;
+import fr.ifremer.mexico.model.Feature;
+import fr.ifremer.mexico.model.FeatureImpl;
+import fr.ifremer.mexico.model.ValueType;
+import fr.inra.masc.MascTechnicalException;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_LEVEL;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_VALUE_TYPE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_AUTHOR;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DATE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_ID;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_LICENCE;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTORS;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE_TYPE;
+
+/**
+* @author sletellier <letellier(a)codelutin.com>
+*/
+public class ExperienceDesignParser extends MexicoXmlParser<ExperienceDesign> {
+
+ protected Map<String, Factor> factors;
+
+ public ExperienceDesignParser(File file) throws FileNotFoundException {
+ super(file);
+ this.factors = Maps.newHashMap();
+ }
+
+ @Override
+ protected ExperienceDesign parseModel(XmlPullParser parser) throws IOException, XmlPullParserException, ParseException {
+ ExperienceDesign model = new ExperienceDesignImpl();
+
+ parseExperienceDesignMeta(parser, model);
+ parseFactors(parser, model);
+
+ return model;
+ }
+
+ protected void parseExperienceDesignMeta(XmlPullParser parser, ExperienceDesign model) throws IOException, XmlPullParserException, ParseException {
+
+ // file must start with experiment design tag
+ if (parser.nextTag() == XmlPullParser.START_TAG &&
+ !parserEqual(parser, EXPERIMENT_DESIGN)) {
+ throw new MascTechnicalException("Experiment design file must start with " + EXPERIMENT_DESIGN + " tag");
+ }
+
+ // parse experiment design id
+ String id = parser.getAttributeValue(null, EXPERIMENT_DESIGN_ID);
+ model.setId(id);
+
+ // parse date
+ String dateAsString = parser.getAttributeValue(null, EXPERIMENT_DESIGN_DATE);
+ model.setDate(parseDate(dateAsString));
+
+ // parse author
+ String author = parser.getAttributeValue(null, EXPERIMENT_DESIGN_AUTHOR);
+ model.setAuthor(author);
+
+ // parse license
+ String license = parser.getAttributeValue(null, EXPERIMENT_DESIGN_LICENCE);
+ model.setLicence(license);
+
+ // parse description
+ if (parser.nextTag() == XmlPullParser.START_TAG &&
+ parserEqual(parser, EXPERIMENT_DESIGN_DESCRIPTION)) {
+
+ model.setDescription(parser.nextText());
+
+ // read next tag
+ parser.nextTag();
+ }
+ }
+ protected void parseFactors(XmlPullParser parser, ExperienceDesign model) throws IOException, XmlPullParserException {
+
+ // factors
+ int eventType = parser.getEventType();
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FACTORS)) {
+
+ List<Factor> factors = Lists.newArrayList();
+ while (!(parser.nextTag() == XmlPullParser.END_TAG &&
+ parserEqual(parser, FACTORS))) {
+
+ // factor
+ factors.add(parseFactor(parser));
+ }
+ model.setFactors(factors);
+ }
+
+ // read experience design next tag
+ parser.nextTag();
+ }
+
+ protected Factor parseFactor(XmlPullParser parser) throws IOException, XmlPullParserException {
+
+ Factor factor = new FactorImpl();
+
+ // parse description
+ int eventType = parser.nextTag();
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FACTOR_DESCRIPTION)) {
+ factor.setDescription(parser.nextText());
+
+ // read function close tag
+ eventType = parser.nextTag();
+ }
+
+ // domain
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, DOMAIN)) {
+ factor.setDomain(parseDomain(parser));
+ }
+
+ // features
+ if (parser.getEventType() == XmlPullParser.START_TAG &&
+ parserEqual(parser, FEATURE)) {
+
+ List<Feature> features = Lists.newArrayList();
+
+ while (parserEqual(parser, FEATURE)) {
+
+ // feature
+ features.add(parseFeature(parser));
+
+ // read feature close tag
+ parser.nextTag();
+
+ // read next tag
+ parser.nextTag();
+ }
+ factor.setFeatures(features);
+ }
+
+ // keep factors
+ factors.put(factor.getId(), factor);
+
+ return factor;
+ }
+ protected Domain parseDomain(XmlPullParser parser) throws XmlPullParserException {
+ Domain domain = new DomainImpl();
+
+ // name
+ String name = parser.getAttributeValue(null, DOMAIN_NAME);
+ domain.setName(name);
+
+ // distributionParameter
+ String distributionParameter = parser.getAttributeValue(null, DOMAIN_DISTRIBUTION_PARAMETER);
+ domain.setDistributionParameter(distributionParameter);
+
+ // level
+ String level = parser.getAttributeValue(null, DOMAIN_LEVEL);
+ domain.setLevel(Integer.parseInt(level));
+
+ // valueType
+ String valueType = parser.getAttributeValue(null, DOMAIN_VALUE_TYPE);
+ domain.setValueType(ValueType.valueOf(valueType));
+
+ // nominaleValue
+ // TODO sletellier 20111215 : take care of type
+ String nominaleValue = parser.getAttributeValue(null, DOMAIN_NOMINAL_VALUE);
+ domain.setNominalValue(nominaleValue);
+
+ return domain;
+ }
+
+ protected Feature parseFeature(XmlPullParser parser) {
+ Feature feature = new FeatureImpl();
+
+ // name
+ String name = parser.getAttributeValue(null, FEATURE_NAME);
+ feature.setName(name);
+
+ // value
+ // TODO sletellier 20111215 : take care of type
+ String value = parser.getAttributeValue(null, FEATURE_VALUE);
+ feature.setValue(value);
+
+ // value type
+ String valueType = parser.getAttributeValue(null, FEATURE_VALUE_TYPE);
+ feature.setValueType(ValueType.valueOf(valueType));
+
+ return feature;
+ }
+
+ public Map<String, Factor> getFactors() {
+ return factors;
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/InputDesignParser.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,126 @@
+package fr.inra.masc.io.parser;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.Factor;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.ifremer.mexico.model.InputDesignImpl;
+import fr.ifremer.mexico.model.Scenario;
+import fr.ifremer.mexico.model.ScenarioImpl;
+import fr.inra.masc.MascTechnicalException;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR;
+import static fr.inra.masc.io.MexicoXmlConstant.INPUT_DESIGN;
+import static fr.inra.masc.io.MexicoXmlConstant.INPUT_DESIGN_DATE;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO_FACTOR_VALUES;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO_ORDER_NUMBER;
+
+/**
+* @author sletellier <letellier(a)codelutin.com>
+*/
+public class InputDesignParser extends MexicoXmlParser<InputDesign> {
+
+ protected ExperienceDesignParser experienceDesignParser;
+
+ public InputDesignParser(File file) throws FileNotFoundException {
+ super(file);
+ experienceDesignParser = new ExperienceDesignParser(file);
+ }
+
+ @Override
+ protected InputDesign parseModel(XmlPullParser parser) throws IOException, XmlPullParserException, ParseException {
+ InputDesign model = new InputDesignImpl();
+
+ parseInputDesignMeta(parser, model);
+
+ // parse experiment design
+ ExperienceDesign experienceDesign = experienceDesignParser.parseModel(parser);
+ model.setExperienceDesign(experienceDesign);
+
+ parseScenarios(parser, model);
+
+ return model;
+ }
+
+ protected void parseInputDesignMeta(XmlPullParser parser, InputDesign model) throws IOException, XmlPullParserException, ParseException {
+
+ // file must start with input design tag
+ if (parser.next() == XmlPullParser.START_TAG &&
+ !parserEqual(parser, INPUT_DESIGN)) {
+ throw new MascTechnicalException("Input design file must start with " + INPUT_DESIGN + " tag");
+ }
+
+ // parse date
+ String dateAsString = parser.getAttributeValue(null, INPUT_DESIGN_DATE);
+ model.setDate(parseDate(dateAsString));
+ }
+
+ protected void parseScenarios(XmlPullParser parser, InputDesign model) throws IOException, XmlPullParserException {
+
+ // scenarios
+ if (parser.nextTag() == XmlPullParser.START_TAG &&
+ parserEqual(parser, SCENARIO)) {
+
+ List<Scenario> scenarios = Lists.newArrayList();
+ while (!(parser.getEventType() == XmlPullParser.END_TAG &&
+ parserEqual(parser, INPUT_DESIGN))) {
+
+ // factor
+ scenarios.add(parseScenario(parser));
+ }
+ model.setScenarios(scenarios);
+ }
+ }
+
+ protected Scenario parseScenario(XmlPullParser parser) throws IOException, XmlPullParserException {
+ Scenario scenario = new ScenarioImpl();
+
+ // name
+ String name = parser.getAttributeValue(null, SCENARIO_NAME);
+ scenario.setName(name);
+
+ // orderValue
+ String orderValue = parser.getAttributeValue(null, SCENARIO_ORDER_NUMBER);
+ scenario.setOrderNumber(Integer.parseInt(orderValue));
+
+ // factor values
+ if (parser.nextTag() == XmlPullParser.START_TAG &&
+ parserEqual(parser, SCENARIO_FACTOR_VALUES)) {
+
+ Map<Factor, Object> factorValues = Maps.newHashMap();
+ while (!(parser.getEventType() == XmlPullParser.END_TAG &&
+ parserEqual(parser, SCENARIO))) {
+
+ // get factor
+ String factorId = parser.getAttributeValue(null, FACTOR);
+ Factor factor = experienceDesignParser.getFactors().get(factorId);
+
+ // factor value
+ String value = parser.nextText();
+
+ factorValues.put(factor, value);
+
+ // read next tag
+ parser.nextTag();
+ }
+ scenario.setFactorValues(factorValues);
+ }
+
+ // read next tag
+ parser.nextTag();
+
+ return scenario;
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/parser/MascModelParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/MascModelParser.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/MascModelParser.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,372 @@
+package fr.inra.masc.io.parser;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import fr.inra.masc.MascTechnicalException;
+import fr.inra.masc.model.ComputableCriteria;
+import fr.inra.masc.model.ComputableCriteriaImpl;
+import fr.inra.masc.model.Criteria;
+import fr.inra.masc.model.Function;
+import fr.inra.masc.model.FunctionImpl;
+import fr.inra.masc.model.MascModel;
+import fr.inra.masc.model.MascModelImpl;
+import fr.inra.masc.model.Option;
+import fr.inra.masc.model.OptionImpl;
+import fr.inra.masc.model.OptionValue;
+import fr.inra.masc.model.OptionValueImpl;
+import fr.inra.masc.model.ScaleGroup;
+import fr.inra.masc.model.ScaleValue;
+import fr.inra.masc.model.ScaleValueImpl;
+import fr.inra.masc.model.ThresholdCriteria;
+import fr.inra.masc.model.ThresholdCriteriaImpl;
+import fr.inra.masc.model.ValuedCriteriaImpl;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import static fr.inra.masc.io.MascXmlConstant.ATTRIBUTE;
+import static fr.inra.masc.io.MascXmlConstant.CRITERIA_DESCRIPTION;
+import static fr.inra.masc.io.MascXmlConstant.CRITERIA_NAME;
+import static fr.inra.masc.io.MascXmlConstant.DEXI;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_CONSIST;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_ENTERED;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_LOW;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_WEIGHTS;
+import static fr.inra.masc.io.MascXmlConstant.LINE;
+import static fr.inra.masc.io.MascXmlConstant.MODEL_DESCRIPTION;
+import static fr.inra.masc.io.MascXmlConstant.MODEL_NAME;
+import static fr.inra.masc.io.MascXmlConstant.OPTION;
+import static fr.inra.masc.io.MascXmlConstant.SCALE;
+import static fr.inra.masc.io.MascXmlConstant.SCALE_VALUE_DESCRIPTION;
+import static fr.inra.masc.io.MascXmlConstant.SCALE_VALUE_GROUP;
+import static fr.inra.masc.io.MascXmlConstant.SCALE_VALUE_NAME;
+import static fr.inra.masc.io.MascXmlConstant.SETTINGS;
+
+/**
+ * @author sletellier <letellier(a)codelutin.com>
+ */
+public class MascModelParser extends XmlParser<MascModel> {
+
+ protected Multimap<String,Integer> thresholds;
+
+ public MascModelParser(File file, Multimap<String,Integer> thresholds) throws FileNotFoundException {
+ super(file);
+ this.thresholds = thresholds;
+ }
+
+ @Override
+ protected MascModel parseModel(XmlPullParser parser) throws IOException, XmlPullParserException, ParseException {
+ MascModel model = new MascModelImpl();
+
+ parseMeta(parser, model);
+ parseAttributes(parser, model);
+
+ return model;
+ }
+
+ protected void parseMeta(XmlPullParser parser, MascModel model) throws IOException, XmlPullParserException {
+
+ // file must start with DEXi tag
+ if (parser.next() == XmlPullParser.START_TAG &&
+ !parserEqual(parser, DEXI)) {
+ throw new MascTechnicalException("Masc file must start with " + DEXI + " tag");
+ }
+
+ // start parsing model attributes
+ // parse name
+ int eventType = parser.nextTag();
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, MODEL_NAME)) {
+ model.setName(parser.nextText());
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse description
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, MODEL_DESCRIPTION)) {
+
+ List<String> descriptions = Lists.newArrayList();
+ while (!(parser.nextTag() == XmlPullParser.END_TAG &&
+ parserEqual(parser, MODEL_DESCRIPTION))) {
+
+ if (parserEqual(parser, LINE)) {
+ descriptions.add(parser.nextText());
+ }
+ }
+
+ model.setDescription(descriptions);
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse options
+ List<Option> options = Lists.newLinkedList();
+ while (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, OPTION)) {
+
+ Option option = new OptionImpl();
+ option.setName(parser.nextText());
+ options.add(option);
+
+ // read end option tag
+ eventType = parser.nextTag();
+ }
+ model.setOption(options);
+
+ // parse settings
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, SETTINGS)) {
+
+ Map<String, String> settings = new LinkedHashMap<String, String>();
+ while (!(parser.nextTag() == XmlPullParser.END_TAG &&
+ parserEqual(parser, SETTINGS))) {
+ settings.put(parser.getName(), parser.nextText());
+ }
+ model.setSettings(settings);
+
+ // read next tag
+ parser.nextTag();
+ }
+ }
+
+ protected void parseAttributes(XmlPullParser parser, MascModel model) throws IOException, XmlPullParserException {
+ List<Criteria> criterias = Lists.newArrayList();
+ while (parser.getEventType() == XmlPullParser.START_TAG &&
+ parserEqual(parser, ATTRIBUTE)) {
+
+ Criteria criteria = parseAttribute(parser, model);
+ criterias.add(criteria);
+
+ // Read closeTag
+ parser.nextTag();
+ }
+ model.setCriteria(criterias);
+ }
+
+ protected Criteria parseAttribute(XmlPullParser parser, MascModel model) throws IOException, XmlPullParserException {
+
+ // parse name
+ int eventType = parser.nextTag();
+ if (eventType == XmlPullParser.START_TAG &&
+ !parserEqual(parser, CRITERIA_NAME)) {
+
+ throw new MascTechnicalException("All criteria must have a name");
+ }
+ String name = parser.nextText();
+
+ // read next tag
+ eventType = parser.nextTag();
+
+ // parse description
+ String description = null;
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, CRITERIA_DESCRIPTION)) {
+
+ description = parser.nextText();
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse scales
+ if (eventType == XmlPullParser.START_TAG &&
+ !parserEqual(parser, SCALE)) {
+
+ throw new MascTechnicalException("All criteria must have a scalesValue");
+ }
+ List<ScaleValue> scaleValues = parseScale(parser);
+
+ // parse function
+ Function function = null;
+ if (parser.getEventType() == XmlPullParser.START_TAG &&
+ parserEqual(parser, FUNCTION)) {
+
+ function = parseFunction(parser);
+ }
+
+ // parse option value
+ int optionValueCnt = 0;
+ List<OptionValue> optionValues = Lists.newLinkedList();
+ while (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, OPTION)) {
+
+ OptionValue optionValue = new OptionValueImpl();
+ optionValue.setValue(Integer.parseInt(parser.nextText()));
+ Option option = model.getOption(optionValueCnt++);
+
+ // initialize option value list
+ if (option.getOptionValue() == null) {
+ LinkedList<OptionValue> optionValuesList = Lists.newLinkedList();
+ option.setOptionValue(optionValuesList);
+ }
+ option.addOptionValue(optionValue);
+ optionValues.add(optionValue);
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse attributes
+ List<Criteria> criterias = new ArrayList<Criteria>();
+ if (parser.getEventType() == XmlPullParser.START_TAG &&
+ parserEqual(parser, ATTRIBUTE)) {
+
+ while (!(parser.getEventType() == XmlPullParser.END_TAG &&
+ parserEqual(parser, ATTRIBUTE))) {
+
+ criterias.add(parseAttribute(parser, model));
+ parser.nextTag();
+ }
+ }
+
+ Criteria current;
+ if (function != null) {
+
+ // non editable criteria
+ ComputableCriteria computableCriteria = new ComputableCriteriaImpl();
+ computableCriteria.setFunction(function);
+ current = computableCriteria;
+ } else {
+
+ // editable criteria
+ // check on properties if its a threshold criteria
+ if (thresholds.containsKey(name)) {
+ ThresholdCriteria thresholdCriteria = new ThresholdCriteriaImpl();
+ Collection<Integer> values = thresholds.get(name);
+ thresholdCriteria.setValues(values);
+ current = thresholdCriteria;
+ } else {
+ // else is a valued one
+ current = new ValuedCriteriaImpl();
+ }
+ }
+
+ // fill options values
+ for (OptionValue optionValue : optionValues) {
+ optionValue.setCriteria(current);
+ }
+
+ // fill criteria
+ current.setName(name);
+ current.setDescription(description);
+ current.setScale(scaleValues);
+ current.setChildren(criterias);
+
+ return current;
+ }
+
+ protected List<ScaleValue> parseScale(XmlPullParser parser) throws IOException, XmlPullParserException {
+
+ List<ScaleValue> scaleValues = new ArrayList<ScaleValue>();
+ while (!(parser.nextTag() == XmlPullParser.END_TAG &&
+ parserEqual(parser, SCALE))) {
+
+ // parse name
+ int eventType = parser.nextTag();
+ if (eventType == XmlPullParser.START_TAG &&
+ !parserEqual(parser, SCALE_VALUE_NAME)) {
+
+ throw new MascTechnicalException("All scale value must have a name");
+ }
+ ScaleValue scaleValue = new ScaleValueImpl();
+ scaleValue.setName(parser.nextText());
+ eventType = parser.nextTag();
+
+ // parse description
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, SCALE_VALUE_DESCRIPTION)) {
+
+ scaleValue.setDescription(parser.nextText());
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse group
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, SCALE_VALUE_GROUP)) {
+
+ String groupValue = parser.nextText();
+ scaleValue.setGroup(ScaleGroup.valueOf(groupValue));
+
+ // read next tag
+ parser.nextTag();
+ }
+ scaleValues.add(scaleValue);
+ }
+ // read scale close tag
+ parser.nextTag();
+
+ return scaleValues;
+ }
+
+ protected Function parseFunction(XmlPullParser parser) throws IOException, XmlPullParserException {
+ Function function = new FunctionImpl();
+
+ // parse low
+ int eventType = parser.nextTag();
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FUNCTION_LOW)) {
+
+ function.setLow(parser.nextText());
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse entered
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FUNCTION_ENTERED)) {
+
+ function.setEntered(parser.nextText());
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse weights
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FUNCTION_WEIGHTS)) {
+
+ function.setWeights(parser.nextText());
+
+ // read next tag
+ eventType = parser.nextTag();
+ }
+
+ // parse consist
+ if (eventType == XmlPullParser.START_TAG &&
+ parserEqual(parser, FUNCTION_CONSIST)) {
+
+ function.setConsist(Boolean.parseBoolean(parser.nextText()));
+
+ // read next tag
+ parser.nextTag();
+ }
+
+ // read function close tag
+ parser.nextTag();
+
+ return function;
+ }
+
+ @Override
+ public boolean parserEqual(XmlPullParser parser, String name) {
+ String tagName = parser.getName();
+ return tagName.equalsIgnoreCase(name);
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/parser/MexicoXmlParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/MexicoXmlParser.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/MexicoXmlParser.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,22 @@
+package fr.inra.masc.io.parser;
+
+import fr.inra.masc.io.DateFormatFactory;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.text.ParseException;
+import java.util.Date;
+
+/**
+ * @author sletellier <letellier(a)codelutin.com>
+ */
+public abstract class MexicoXmlParser<M> extends XmlParser<M> {
+
+ public MexicoXmlParser(File file) throws FileNotFoundException {
+ super(file);
+ }
+
+ public Date parseDate(String toParse) throws ParseException {
+ return DateFormatFactory.getMexicoDateFormat().parse(toParse);
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/parser/XmlParser.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,42 @@
+package fr.inra.masc.io.parser;
+
+import fr.inra.masc.io.DateFormatFactory;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.text.ParseException;
+
+/**
+ * Abstract parser to get model from xml file using XPP3
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public abstract class XmlParser<M> extends FileReader {
+
+ public XmlParser(File file) throws FileNotFoundException {
+ super(file);
+ }
+
+ public M getModel() throws XmlPullParserException, IOException, ParseException {
+
+ XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
+ XmlPullParser parser = factory.newPullParser();
+ parser.setInput(this);
+
+ // parse model
+ return parseModel(parser);
+ }
+
+ protected abstract M parseModel(XmlPullParser parser) throws IOException, XmlPullParserException, ParseException;
+
+ public boolean parserEqual(XmlPullParser parser, String name) {
+ String tagName = parser.getName();
+ return tagName.equals(name);
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/writer/DexiXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/DexiXmlWriter.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/DexiXmlWriter.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,174 @@
+package fr.inra.masc.io.writer;
+
+import com.google.common.collect.LinkedListMultimap;
+import com.google.common.collect.Multimap;
+import fr.inra.masc.model.ComputableCriteria;
+import fr.inra.masc.model.Criteria;
+import fr.inra.masc.model.Function;
+import fr.inra.masc.model.MascModel;
+import fr.inra.masc.model.Option;
+import fr.inra.masc.model.OptionValue;
+import fr.inra.masc.model.ScaleValue;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
+
+import static fr.inra.masc.io.MascXmlConstant.ATTRIBUTE;
+import static fr.inra.masc.io.MascXmlConstant.CRITERIA_DESCRIPTION;
+import static fr.inra.masc.io.MascXmlConstant.CRITERIA_NAME;
+import static fr.inra.masc.io.MascXmlConstant.DEXI;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_CONSIST;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_ENTERED;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_LOW;
+import static fr.inra.masc.io.MascXmlConstant.FUNCTION_WEIGHTS;
+import static fr.inra.masc.io.MascXmlConstant.LINE;
+import static fr.inra.masc.io.MascXmlConstant.MODEL_DESCRIPTION;
+import static fr.inra.masc.io.MascXmlConstant.MODEL_NAME;
+import static fr.inra.masc.io.MascXmlConstant.OPTION;
+import static fr.inra.masc.io.MascXmlConstant.SCALE;
+import static fr.inra.masc.io.MascXmlConstant.SCALE_VALUE;
+import static fr.inra.masc.io.MascXmlConstant.SCALE_VALUE_DESCRIPTION;
+import static fr.inra.masc.io.MascXmlConstant.SCALE_VALUE_GROUP;
+import static fr.inra.masc.io.MascXmlConstant.SCALE_VALUE_NAME;
+import static fr.inra.masc.io.MascXmlConstant.SETTINGS;
+
+/**
+ * Writer to create DEXi file with {@link MascModel} model
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class DexiXmlWriter extends XmlWriter<MascModel> {
+
+ protected Multimap<Criteria, OptionValue> criteriaOptionValues;
+
+ public DexiXmlWriter(File file, MascModel model) throws IOException {
+ super(file, model);
+ this.criteriaOptionValues = LinkedListMultimap.create();
+ }
+
+ @Override
+ public XmlNode getRootElement() {
+ XmlNode rootXmlNode = new XmlNode(DEXI);
+ composeMeta(rootXmlNode);
+ composeAttributes(rootXmlNode);
+
+ return rootXmlNode;
+ }
+
+ protected void composeMeta(XmlNode rootXmlNode) {
+
+ // model name
+ add(rootXmlNode, MODEL_NAME, model.getName());
+
+ // model description
+ XmlNode descriptionXmlNode = createElement(rootXmlNode, MODEL_DESCRIPTION);
+ for (String line : model.getDescription()) {
+ add(descriptionXmlNode, LINE, line);
+ }
+
+ // options
+ for (Option option : model.getOption()) {
+ add(rootXmlNode, OPTION, option.getName());
+
+ // load all option values
+ for (OptionValue optionValue : option.getOptionValue()) {
+
+ // fill map
+ Criteria criteria = optionValue.getCriteria();
+ criteriaOptionValues.put(criteria, optionValue);
+ }
+ }
+
+ // settings
+ Map<String,String> settings = model.getSettings();
+ if (MapUtils.isNotEmpty(settings)) {
+ XmlNode settingXmlNode = createElement(rootXmlNode, SETTINGS);
+ for (String settingName : settings.keySet()) {
+ String settingsValue = settings.get(settingName);
+ add(settingXmlNode, settingName, settingsValue);
+ }
+ }
+ }
+
+ protected void composeAttributes(XmlNode rootXmlNode) {
+ Collection<Criteria> criterias = model.getCriteria();
+ if (CollectionUtils.isNotEmpty(criterias)) {
+ for (Criteria criteria : criterias) {
+ composeAttribute(criteria, rootXmlNode);
+ }
+ }
+ }
+
+ protected void composeAttribute(Criteria criteria, XmlNode rootXmlNode) {
+ XmlNode attributeXmlNode = createElement(rootXmlNode, ATTRIBUTE);
+
+ // attribute name
+ add(attributeXmlNode, CRITERIA_NAME, criteria.getName());
+
+ // attribute description
+ add(attributeXmlNode, CRITERIA_DESCRIPTION, criteria.getDescription());
+
+ // scale
+ XmlNode scaleXmlNode = createElement(attributeXmlNode, SCALE);
+
+ // scale values
+ for (ScaleValue scaleValue : criteria.getScale()) {
+ XmlNode scaleValueXmlNode = createElement(scaleXmlNode, SCALE_VALUE);
+ add(scaleValueXmlNode, SCALE_VALUE_NAME, scaleValue.getName());
+ add(scaleValueXmlNode, SCALE_VALUE_DESCRIPTION, scaleValue.getDescription());
+ add(scaleValueXmlNode, SCALE_VALUE_GROUP, scaleValue.getGroup());
+ }
+
+ // function
+ if (criteria instanceof ComputableCriteria) {
+ ComputableCriteria computableCriteria = (ComputableCriteria) criteria;
+ XmlNode functionXmlNode = createElement(attributeXmlNode, FUNCTION);
+ Function function = computableCriteria.getFunction();
+ add(functionXmlNode, FUNCTION_LOW, function.getLow());
+ add(functionXmlNode, FUNCTION_ENTERED, function.getEntered());
+ add(functionXmlNode, FUNCTION_WEIGHTS, function.getWeights());
+ add(functionXmlNode, FUNCTION_CONSIST, function.getConsist());
+ }
+
+ // options
+ Collection<OptionValue> optionValues = criteriaOptionValues.get(criteria);
+ for (OptionValue optionValue : optionValues) {
+ add(attributeXmlNode, OPTION, optionValue.getValue());
+ }
+
+ // children
+ for (Criteria child : criteria.getChildren()) {
+ composeAttribute(child, attributeXmlNode);
+ }
+ }
+
+ protected void add(XmlNode parentXmlNode, String tagName, Object value) {
+ if (value != null) {
+ String toString = value.toString();
+
+ // boolean are capitalized in masc xml file
+ if (value instanceof Boolean) {
+ toString = StringUtils.capitalize(toString);
+ }
+ createElement(parentXmlNode, tagName, toString);
+ }
+ }
+
+ // Override to upper case tagNames
+ public XmlNode createElement(XmlNode parentXmlNode, String tagName) {
+ return createElement(parentXmlNode, tagName, null);
+ }
+
+ public XmlNode createElement(XmlNode parentXmlNode, String tagName, String text) {
+ XmlNode xmlNode = XmlNode.createElement(tagName.toUpperCase(), text);
+ parentXmlNode.add(xmlNode);
+ return xmlNode;
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/ExperienceDesignXmlWriter.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,113 @@
+package fr.inra.masc.io.writer;
+
+import fr.ifremer.mexico.model.Domain;
+import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.Factor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Date;
+
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_DISTRIBUTION_PARAMETER;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_LEVEL;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_NOMINAL_VALUE;
+import static fr.inra.masc.io.MexicoXmlConstant.DOMAIN_VALUE_TYPE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_AUTHOR;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DATE;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_ID;
+import static fr.inra.masc.io.MexicoXmlConstant.EXPERIMENT_DESIGN_LICENCE;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTORS;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_DESCRIPTION;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_ID;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR_UNIT;
+
+/**
+ * Writer to create experiment design file with {@link ExperienceDesign} model
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class ExperienceDesignXmlWriter extends MexicoXmlWriter<ExperienceDesign> {
+
+ public ExperienceDesignXmlWriter(File file, ExperienceDesign model) throws IOException {
+ super(file, model);
+ }
+
+ @Override
+ public XmlNode getRootElement() {
+
+ XmlNode rootXmlNode = new XmlNode(EXPERIMENT_DESIGN);
+ composeExperienceDesignMeta(rootXmlNode);
+ composeFactors(rootXmlNode);
+
+ // TODO sletellier 2011/12/14 : implement workflow
+ // composeWorkFlow(rootXmlNode);
+
+ return rootXmlNode;
+ }
+
+ protected void composeExperienceDesignMeta(XmlNode rootXmlNode) {
+
+ // date
+ Date date = model.getDate();
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_DATE, formatDate(date));
+
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_ID, model.getId());
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_AUTHOR, model.getAuthor());
+ addParameter(rootXmlNode, EXPERIMENT_DESIGN_LICENCE, model.getLicence());
+
+ // description
+ String description = model.getDescription();
+ if (StringUtils.isNotEmpty(description)) {
+ XmlNode.createElement(rootXmlNode, EXPERIMENT_DESIGN_DESCRIPTION, description);
+ }
+ }
+
+ protected void composeFactors(XmlNode rootXmlNode) {
+ Collection<Factor> factors = model.getFactors();
+
+ // do nothing if no factors in model
+ if (factors.isEmpty()) {
+ return;
+ }
+
+ // creating factors node
+ XmlNode factorsXmlNode = XmlNode.createElement(rootXmlNode, FACTORS);
+ for (Factor factor : factors) {
+
+ // factor
+ XmlNode factorXmlNode = XmlNode.createElement(factorsXmlNode, FACTOR);
+ addParameter(factorXmlNode, FACTOR_ID, factor.getId());
+ addParameter(factorXmlNode, FACTOR_NAME, factor.getName());
+ addParameter(factorXmlNode, FACTOR_UNIT, factor.getUnit());
+
+ // description
+ String description = model.getDescription();
+ if (StringUtils.isNotEmpty(description)) {
+ XmlNode.createElement(factorXmlNode, FACTOR_DESCRIPTION, factor.getDescription());
+ }
+
+ // domain
+ Domain domain = factor.getDomain();
+ if (domain != null) {
+ XmlNode domainXmlNode = XmlNode.createElement(factorXmlNode, DOMAIN);
+ addParameter(domainXmlNode, DOMAIN_NAME, domain.getName());
+ addParameter(domainXmlNode, DOMAIN_DISTRIBUTION_PARAMETER, domain.getDistributionParameter());
+ addParameter(domainXmlNode, DOMAIN_LEVEL, String.valueOf(domain.getLevel()));
+ addParameter(domainXmlNode, DOMAIN_VALUE_TYPE, domain.getValueType());
+ addParameter(domainXmlNode, DOMAIN_NOMINAL_VALUE, domain.getNominalValue());
+ }
+
+ // features
+ addAllFeature(factorXmlNode, factor.getFeatures());
+ }
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/InputDesignXmlWriter.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,71 @@
+package fr.inra.masc.io.writer;
+
+import fr.ifremer.mexico.model.Factor;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.ifremer.mexico.model.Scenario;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+
+import static fr.inra.masc.io.MexicoXmlConstant.FACTOR;
+import static fr.inra.masc.io.MexicoXmlConstant.INPUT_DESIGN;
+import static fr.inra.masc.io.MexicoXmlConstant.INPUT_DESIGN_DATE;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO_FACTOR_VALUES;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.SCENARIO_ORDER_NUMBER;
+
+/**
+ * Writer to create input design file with {@link fr.ifremer.mexico.model.InputDesign} model
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class InputDesignXmlWriter extends MexicoXmlWriter<InputDesign> {
+
+ public InputDesignXmlWriter(File file, InputDesign model) throws IOException {
+ super(file, model);
+ }
+
+ @Override
+ public XmlNode getRootElement() {
+ XmlNode rootXmlNode = new XmlNode(INPUT_DESIGN);
+ composeInputDesignMeta(rootXmlNode);
+ composeScenarios(rootXmlNode);
+
+ return rootXmlNode;
+ }
+
+ protected void composeInputDesignMeta(XmlNode rootXmlNode) {
+
+ // date
+ Date date = model.getDate();
+ addParameter(rootXmlNode, INPUT_DESIGN_DATE, formatDate(date));
+
+ // experiement design
+ rootXmlNode.add(getRootElement());
+ }
+
+ protected void composeScenarios(XmlNode rootXmlNode) {
+
+ // scenarios
+ for (Scenario scenario : model.getScenarios()) {
+ XmlNode scenariosXmlNode = XmlNode.createElement(rootXmlNode, SCENARIO);
+ addParameter(scenariosXmlNode, SCENARIO_NAME, scenario.getName());
+ addParameter(scenariosXmlNode, SCENARIO_ORDER_NUMBER, scenario.getOrderNumber());
+
+ // factor values
+ Map<Factor,Object> factorValues = scenario.getFactorValues();
+ for (Map.Entry<Factor,Object> entry : factorValues.entrySet()) {
+ Object value = entry.getValue();
+ XmlNode factorValueXmlNode = XmlNode.createElement(scenariosXmlNode, SCENARIO_FACTOR_VALUES, String.valueOf(value));
+ factorValueXmlNode.addAttribute(FACTOR, entry.getKey().getId());
+ }
+
+ // features
+ addAllFeature(scenariosXmlNode, scenario.getFeatures());
+ }
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/MexicoXmlWriter.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,48 @@
+package fr.inra.masc.io.writer;
+
+import fr.ifremer.mexico.model.Feature;
+import fr.inra.masc.io.DateFormatFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Date;
+
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_NAME;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE;
+import static fr.inra.masc.io.MexicoXmlConstant.FEATURE_VALUE_TYPE;
+
+/**
+ * Abstract writer create mexico files with specific model
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public abstract class MexicoXmlWriter<M> extends XmlWriter<M> {
+
+ protected MexicoXmlWriter(File file, M model) throws IOException {
+ super(file, model);
+ }
+
+ public void addParameter(XmlNode xmlNode, String parameterName, Object value) {
+ if (value != null) {
+ xmlNode.addAttribute(parameterName, value.toString());
+ }
+ }
+
+ protected void addAllFeature(XmlNode factorXmlNode, Collection<Feature> features) {
+ if (features != null) {
+ for (Feature feature : features) {
+ XmlNode featureXmlNode = XmlNode.createElement(factorXmlNode, FEATURE);
+ addParameter(featureXmlNode, FEATURE_NAME, feature.getName());
+ addParameter(featureXmlNode, FEATURE_VALUE, feature.getValue());
+ addParameter(featureXmlNode, FEATURE_VALUE_TYPE, feature.getValueType());
+ }
+ }
+ }
+
+ public String formatDate(Date toFormat) {
+ return DateFormatFactory.getMexicoDateFormat().format(toFormat);
+ }
+}
Copied: masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlNode.java (from rev 519, masc/masc-api/src/main/java/fr/inra/masc/io/Element.java)
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlNode.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlNode.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,115 @@
+package fr.inra.masc.io.writer;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Represent an XML node
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class XmlNode {
+
+ public static final String XML_META = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ public static final String CLOSED_TAG = "%s<%s%s/>\n";
+ public static final String START_TAG = "%s<%s%s>";
+ public static final String END_TAG = "%s</%s>\n";
+
+ protected LinkedList<XmlNode> children;
+ protected Map<String, String> attributes;
+ protected String tagName;
+ protected String text;
+
+ public XmlNode(String tagName) {
+ this(tagName, null);
+ }
+
+ public XmlNode(String tagName, String text) {
+ this.tagName = tagName;
+ this.text = text;
+ this.children = Lists.newLinkedList();
+ this.attributes = Maps.newHashMap();
+ }
+
+ public void add(XmlNode e) {
+ this.children.add(e);
+ }
+
+ public void addAttribute(String name, String value) {
+ this.attributes.put(name, value);
+ }
+
+ public String toXml(int indent) {
+ StringBuilder stringBuilder = new StringBuilder(XML_META).append("\n");
+ buildXml(-indent, indent, stringBuilder);
+ return stringBuilder.toString();
+ }
+
+ protected void buildXml(int start, int indent, StringBuilder stringBuilder) {
+
+ // closed tag if content is empty
+ if (children.isEmpty() && StringUtils.isEmpty(text)) {
+ addToBuilder(stringBuilder, CLOSED_TAG, getIndentPrefix(start, indent), tagName);
+ return;
+ }
+
+ // start tag
+ addToBuilder(stringBuilder, START_TAG, getIndentPrefix(start, indent), tagName);
+ if (StringUtils.isNotEmpty(text)) {
+
+ // end inline tag
+ addToBuilder(stringBuilder, END_TAG, StringEscapeUtils.escapeXml(text), tagName);
+ } else {
+ stringBuilder.append("\n");
+ for (XmlNode child : children) {
+ child.buildXml(start + indent, indent, stringBuilder);
+ }
+ // end tag
+ addToBuilder(stringBuilder, END_TAG, getIndentPrefix(start, indent), tagName);
+ }
+ }
+
+ protected void addToBuilder(StringBuilder stringBuilder, String template, String prefix, String tagName) {
+ stringBuilder.append(String.format(template, prefix, tagName, getAttributesAsString()));
+ }
+
+ protected String getIndentPrefix(int start, int lenght) {
+ String result = "";
+ for (int i=0;i<start + lenght;i++) {
+ result += " ";
+ }
+ return result;
+ }
+
+ protected String getAttributesAsString() {
+ StringBuilder builder = new StringBuilder();
+ Set<Map.Entry<String,String>> entries = attributes.entrySet();
+ for (Map.Entry<String,String> entry : entries) {
+
+ // add to builder param like : name="value"
+ builder.append(" ").append(entry.getKey()).append("=\"").append(entry.getValue()).append("\"");
+ }
+ return builder.toString();
+ }
+
+ public static XmlNode createElement(XmlNode parentXmlNode, String tagName) {
+ return createElement(parentXmlNode, tagName, null);
+ }
+
+ public static XmlNode createElement(XmlNode parentXmlNode, String tagName, String text) {
+ XmlNode xmlNode = createElement(tagName, text);
+ parentXmlNode.add(xmlNode);
+ return xmlNode;
+ }
+
+ public static XmlNode createElement(String tagName, String text) {
+ return new XmlNode(tagName, text);
+ }
+}
Added: masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlWriter.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlWriter.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/writer/XmlWriter.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,32 @@
+package fr.inra.masc.io.writer;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * Abstract writer to create xml files using {@link XmlNode}
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public abstract class XmlWriter<M> extends FileWriter {
+
+ public static final int INDENT = 2;
+
+ protected M model;
+
+ public XmlWriter(File file, M model) throws IOException {
+ super(file);
+ this.model = model;
+ }
+
+ public void write() throws IOException {
+
+ String toWrite = getRootElement().toXml(INDENT);
+ super.write(toWrite);
+ }
+
+ public abstract XmlNode getRootElement();
+
+}
Deleted: masc/masc-api/src/main/java/fr/inra/masc/model/MascXmlConstant.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/model/MascXmlConstant.java 2011-12-14 15:37:31 UTC (rev 519)
+++ masc/masc-api/src/main/java/fr/inra/masc/model/MascXmlConstant.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -1,30 +0,0 @@
-package fr.inra.masc.model;
-
-/**
- * Regroup all masc xml constants tags
- *
- * @author sletellier <letellier(a)codelutin.com>
- * @since 0.1
- */
-public class MascXmlConstant {
-
- public static final String DEXI = "DEXi";
- public static final String LINE = "line";
- public static final String ATTRIBUTE = "attribute";
- public static final String MODEL_NAME = MascModel.PROPERTY_NAME;
- public static final String MODEL_DESCRIPTION = MascModel.PROPERTY_DESCRIPTION;
- public static final String OPTION = MascModel.PROPERTY_OPTION;
- public static final String SETTINGS = MascModel.PROPERTY_SETTINGS;
- public static final String CRITERIA_NAME = Criteria.PROPERTY_NAME;
- public static final String CRITERIA_DESCRIPTION = Criteria.PROPERTY_DESCRIPTION;
- public static final String SCALE = Criteria.PROPERTY_SCALE;
- public static final String SCALE_VALUE = ScaleValue.class.getSimpleName();
- public static final String SCALE_VALUE_NAME = ScaleValue.PROPERTY_NAME;
- public static final String SCALE_VALUE_DESCRIPTION = ScaleValue.PROPERTY_DESCRIPTION;
- public static final String SCALE_VALUE_GROUP = ScaleValue.PROPERTY_GROUP;
- public static final String FUNCTION = ComputableCriteria.PROPERTY_FUNCTION;
- public static final String FUNCTION_LOW = Function.PROPERTY_LOW;
- public static final String FUNCTION_ENTERED = Function.PROPERTY_ENTERED;
- public static final String FUNCTION_WEIGHTS = Function.PROPERTY_WEIGHTS;
- public static final String FUNCTION_CONSIST = Function.PROPERTY_CONSIST;
-}
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java 2011-12-14 15:37:31 UTC (rev 519)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -1,60 +1,16 @@
package fr.inra.masc.services;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Multimap;
-import fr.inra.masc.model.ComputableCriteria;
-import fr.inra.masc.model.ComputableCriteriaImpl;
-import fr.inra.masc.model.Criteria;
-import fr.inra.masc.model.Function;
-import fr.inra.masc.model.FunctionImpl;
+import fr.inra.masc.io.parser.MascModelParser;
import fr.inra.masc.model.MascModel;
-import fr.inra.masc.model.MascModelImpl;
-import fr.inra.masc.model.Option;
-import fr.inra.masc.model.OptionImpl;
-import fr.inra.masc.model.OptionValue;
-import fr.inra.masc.model.OptionValueImpl;
-import fr.inra.masc.model.ScaleGroup;
-import fr.inra.masc.model.ScaleValue;
-import fr.inra.masc.model.ScaleValueImpl;
-import fr.inra.masc.model.ThresholdCriteria;
-import fr.inra.masc.model.ThresholdCriteriaImpl;
-import fr.inra.masc.model.ValuedCriteriaImpl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlPullParserFactory;
import java.io.File;
import java.io.FileNotFoundException;
-import java.io.FileReader;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.text.ParseException;
-import static fr.inra.masc.model.MascXmlConstant.ATTRIBUTE;
-import static fr.inra.masc.model.MascXmlConstant.CRITERIA_DESCRIPTION;
-import static fr.inra.masc.model.MascXmlConstant.CRITERIA_NAME;
-import static fr.inra.masc.model.MascXmlConstant.DEXI;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_CONSIST;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_ENTERED;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_LOW;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_WEIGHTS;
-import static fr.inra.masc.model.MascXmlConstant.LINE;
-import static fr.inra.masc.model.MascXmlConstant.MODEL_DESCRIPTION;
-import static fr.inra.masc.model.MascXmlConstant.MODEL_NAME;
-import static fr.inra.masc.model.MascXmlConstant.OPTION;
-import static fr.inra.masc.model.MascXmlConstant.SCALE;
-import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_DESCRIPTION;
-import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_GROUP;
-import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_NAME;
-import static fr.inra.masc.model.MascXmlConstant.SETTINGS;
-
/**
* Service use to parse mascXmlFile and build MascModel corresponding
*
@@ -75,12 +31,14 @@
MascModel mascModel = null;
try {
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- XmlPullParser parser = factory.newPullParser();
- parser.setInput(new FileReader(mascFile));
+ MascModelParser mascModelParser = new MascModelParser(mascFile, getConfig().getThresholds());
- // parse model parameters
- mascModel = parseMascModel(parser);
+ try {
+ // parse model
+ mascModel = mascModelParser.getModel();
+ } finally {
+ mascModelParser.close();
+ }
} catch (XmlPullParserException eee) {
throwMascTechnicalException("Failed to parse masc file '" + mascFile.getName() + "'", eee);
@@ -88,314 +46,11 @@
throwMascTechnicalException("Masc file '" + mascFile.getName() + "' not found", eee);
} catch (IOException eee) {
throwMascTechnicalException("Error reading masc file '" + mascFile.getName() + "'", eee);
+ } catch (ParseException eee) {
+ throwMascTechnicalException("Failed to parse masc file '" + mascFile.getName() + "'", eee);
}
return mascModel;
}
- protected MascModel parseMascModel(XmlPullParser parser) throws IOException, XmlPullParserException {
-
- MascModel model = new MascModelImpl();
-
- parseMeta(model, parser);
- parseAttributes(model, parser);
-
- return model;
- }
-
- protected void parseMeta(MascModel model, XmlPullParser parser) throws IOException, XmlPullParserException {
-
- // file must start with DEXi balise
- if (parser.next() == XmlPullParser.START_TAG &&
- !parserEqual(parser, DEXI)) {
- throwMascTechnicalException("Masc file must start with " + DEXI + " tag");
- }
-
- // start parsing model parameters
- // parse name
- int eventType = parser.nextTag();
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, MODEL_NAME)) {
- model.setName(parser.nextText());
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse description
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, MODEL_DESCRIPTION)) {
-
- List<String> descriptions = Lists.newArrayList();
- while (!(parser.nextTag() == XmlPullParser.END_TAG &&
- parserEqual(parser, MODEL_DESCRIPTION))) {
-
- if (parserEqual(parser, LINE)) {
- descriptions.add(parser.nextText());
- }
- }
-
- model.setDescription(descriptions);
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse options
- List<Option> options = Lists.newLinkedList();
- while (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, OPTION)) {
-
- Option option = new OptionImpl();
- option.setName(parser.nextText());
- options.add(option);
-
- // read end option tag
- eventType = parser.nextTag();
- }
- model.setOption(options);
-
- // parse settings
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, SETTINGS)) {
-
- Map<String, String> settings = new LinkedHashMap<String, String>();
- while (!(parser.nextTag() == XmlPullParser.END_TAG &&
- parserEqual(parser, SETTINGS))) {
- settings.put(parser.getName(), parser.nextText());
- }
- model.setSettings(settings);
-
- // read next tag
- parser.nextTag();
- }
- }
-
- protected void parseAttributes(MascModel model, XmlPullParser parser) throws IOException, XmlPullParserException {
- List<Criteria> criterias = Lists.newArrayList();
- while (parser.getEventType() == XmlPullParser.START_TAG &&
- parserEqual(parser, ATTRIBUTE)) {
-
- Criteria criteria = parseAttribute(model, parser);
- criterias.add(criteria);
-
- // Read closeTag
- parser.nextTag();
- }
- model.setCriteria(criterias);
- }
-
- protected Criteria parseAttribute(MascModel model, XmlPullParser parser) throws IOException, XmlPullParserException {
-
- // parse name
- int eventType = parser.nextTag();
- if (eventType == XmlPullParser.START_TAG &&
- !parserEqual(parser, CRITERIA_NAME)) {
-
- log.info(parser.getName());
- throwMascTechnicalException("All criteria must have a name");
- }
- String name = parser.nextText();
-
- // read next tag
- eventType = parser.nextTag();
-
- // parse description
- String description = null;
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, CRITERIA_DESCRIPTION)) {
-
- description = parser.nextText();
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse scales
- if (eventType == XmlPullParser.START_TAG &&
- !parserEqual(parser, SCALE)) {
-
- throwMascTechnicalException("All criteria must have a scalesValue");
- }
- List<ScaleValue> scaleValues = parseScale(parser);
-
- // parse function
- Function function = null;
- if (parser.getEventType() == XmlPullParser.START_TAG &&
- parserEqual(parser, FUNCTION)) {
-
- function = parseFunction(parser);
- }
-
- // parse option value
- int optionValueCnt = 0;
- List<OptionValue> optionValues = Lists.newLinkedList();
- while (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, OPTION)) {
-
- OptionValue optionValue = new OptionValueImpl();
- optionValue.setValue(Integer.parseInt(parser.nextText()));
- Option option = model.getOption(optionValueCnt++);
-
- // initialize option value list
- if (option.getOptionValue() == null) {
- LinkedList<OptionValue> optionValuesList = Lists.newLinkedList();
- option.setOptionValue(optionValuesList);
- }
- option.addOptionValue(optionValue);
- optionValues.add(optionValue);
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse attributes
- List<Criteria> criterias = new ArrayList<Criteria>();
- if (parser.getEventType() == XmlPullParser.START_TAG &&
- parserEqual(parser, ATTRIBUTE)) {
-
- while (!(parser.getEventType() == XmlPullParser.END_TAG &&
- parserEqual(parser, ATTRIBUTE))) {
-
- criterias.add(parseAttribute(model, parser));
- parser.nextTag();
- }
- }
-
- Criteria current;
- if (function != null) {
-
- // non editable criteria
- ComputableCriteria computableCriteria = new ComputableCriteriaImpl();
- computableCriteria.setFunction(function);
- current = computableCriteria;
- } else {
-
- // editable criteria
- // check on properties if its a threshold criteria
- Multimap<String,Integer> thresholds = getConfig().getThresholds();
- if (thresholds.containsKey(name)) {
- ThresholdCriteria thresholdCriteria = new ThresholdCriteriaImpl();
- Collection<Integer> values = thresholds.get(name);
- thresholdCriteria.setValues(values);
- current = thresholdCriteria;
- } else {
- // else is a valued one
- current = new ValuedCriteriaImpl();
- }
- }
-
- // fill options values
- for (OptionValue optionValue : optionValues) {
- optionValue.setCriteria(current);
- }
-
- // fill criteria
- current.setName(name);
- current.setDescription(description);
- current.setScale(scaleValues);
- current.setChildren(criterias);
-
- return current;
- }
-
- protected List<ScaleValue> parseScale(XmlPullParser parser) throws IOException, XmlPullParserException {
-
- List<ScaleValue> scaleValues = new ArrayList<ScaleValue>();
- while (!(parser.nextTag() == XmlPullParser.END_TAG &&
- parserEqual(parser, SCALE))) {
-
- // parse name
- int eventType = parser.nextTag();
- if (eventType == XmlPullParser.START_TAG &&
- !parserEqual(parser, SCALE_VALUE_NAME)) {
-
- throwMascTechnicalException("All scale value must have a name");
- }
- ScaleValue scaleValue = new ScaleValueImpl();
- scaleValue.setName(parser.nextText());
- eventType = parser.nextTag();
-
- // parse description
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, SCALE_VALUE_DESCRIPTION)) {
-
- scaleValue.setDescription(parser.nextText());
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse group
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, SCALE_VALUE_GROUP)) {
-
- String groupValue = parser.nextText();
- scaleValue.setGroup(ScaleGroup.valueOf(groupValue));
-
- // read next tag
- parser.nextTag();
- }
- scaleValues.add(scaleValue);
- }
- // read scale close tag
- parser.nextTag();
-
- return scaleValues;
- }
-
- protected Function parseFunction(XmlPullParser parser) throws IOException, XmlPullParserException {
- Function function = new FunctionImpl();
-
- // parse low
- int eventType = parser.nextTag();
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, FUNCTION_LOW)) {
-
- function.setLow(parser.nextText());
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse entered
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, FUNCTION_ENTERED)) {
-
- function.setEntered(parser.nextText());
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse weights
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, FUNCTION_WEIGHTS)) {
-
- function.setWeights(parser.nextText());
-
- // read next tag
- eventType = parser.nextTag();
- }
-
- // parse consist
- if (eventType == XmlPullParser.START_TAG &&
- parserEqual(parser, FUNCTION_CONSIST)) {
-
- function.setConsist(Boolean.parseBoolean(parser.nextText()));
-
- // read next tag
- parser.nextTag();
- }
-
- // read function close tag
- parser.nextTag();
-
- return function;
- }
-
- protected boolean parserEqual(XmlPullParser parser, String name) {
- String tagName = parser.getName();
- return tagName.equalsIgnoreCase(name);
- }
}
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java 2011-12-14 15:37:31 UTC (rev 519)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoLoadModelService.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -1,10 +1,17 @@
package fr.inra.masc.services;
import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.inra.masc.io.parser.ExperienceDesignParser;
+import fr.inra.masc.io.parser.InputDesignParser;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.xmlpull.v1.XmlPullParserException;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.text.ParseException;
/**
* @author sletellier <letellier(a)codelutin.com>
@@ -19,15 +26,54 @@
return log;
}
- public File loadExperienceDesign(ExperienceDesign mexicoModel, File toSave) {
+ public ExperienceDesign loadExperienceDesignModel(File experienceDesignFile) {
- // TODO sletellier : load mexico experience design xml file
- return toSave;
+ ExperienceDesign experienceDesignModel = null;
+ try {
+ ExperienceDesignParser experienceDesignParser = new ExperienceDesignParser(experienceDesignFile);
+ try {
+ // parse experienceDesign
+ experienceDesignModel = experienceDesignParser.getModel();
+ } finally {
+ experienceDesignParser.close();
+ }
+
+ } catch (XmlPullParserException eee) {
+ throwMascTechnicalException("Failed to parse ExperienceDesign file '" + experienceDesignFile.getName() + "'", eee);
+ } catch (FileNotFoundException eee) {
+ throwMascTechnicalException("ExperienceDesign file '" + experienceDesignFile.getName() + "' not found", eee);
+ } catch (IOException eee) {
+ throwMascTechnicalException("Error reading ExperienceDesign file '" + experienceDesignFile.getName() + "'", eee);
+ } catch (ParseException eee) {
+ throwMascTechnicalException("Failed to parse ExperienceDesign file '" + experienceDesignFile.getName() + "'", eee);
+ }
+
+ return experienceDesignModel;
}
- public File loadInputDesignDesign(ExperienceDesign mexicoModel, File toSave) {
+ public InputDesign loadInputDesignDesignModel(File inputDesignFile) {
- // TODO sletellier : write mexico input design xml file
- return toSave;
+ InputDesign inputDesignModel = null;
+ try {
+ // parse inputDesign
+ InputDesignParser inputDesignParser = new InputDesignParser(inputDesignFile);
+ try {
+ inputDesignModel = inputDesignParser.getModel();
+ } finally {
+ inputDesignParser.close();
+ }
+
+ } catch (XmlPullParserException eee) {
+ throwMascTechnicalException("Failed to parse InputDesign file '" + inputDesignFile.getName() + "'", eee);
+ } catch (FileNotFoundException eee) {
+ throwMascTechnicalException("InputDesign file '" + inputDesignFile.getName() + "' not found", eee);
+ } catch (IOException eee) {
+ throwMascTechnicalException("Error reading InputDesign file '" + inputDesignFile.getName() + "'", eee);
+ } catch (ParseException eee) {
+ throwMascTechnicalException("Failed to parse InputDesign file '" + inputDesignFile.getName() + "'", eee);
+ }
+
+ return inputDesignModel;
}
+
}
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-14 15:37:31 UTC (rev 519)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -1,23 +1,14 @@
package fr.inra.masc.services;
-import fr.ifremer.mexico.model.Domain;
import fr.ifremer.mexico.model.ExperienceDesign;
-import fr.ifremer.mexico.model.Factor;
-import fr.ifremer.mexico.model.Feature;
import fr.ifremer.mexico.model.InputDesign;
-import fr.ifremer.mexico.model.Scenario;
-import fr.inra.masc.io.Element;
-import org.apache.commons.lang3.StringUtils;
+import fr.inra.masc.io.writer.ExperienceDesignXmlWriter;
+import fr.inra.masc.io.writer.InputDesignXmlWriter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Map;
/**
* Service to save mexico model to mexico xml file
@@ -37,204 +28,30 @@
public void saveExperienceDesign(ExperienceDesign experienceDesign, File toSave) {
- ExperienceDesignXmlWriter experienceDesignXmlWriter = new ExperienceDesignXmlWriter(experienceDesign);
- String xml = experienceDesignXmlWriter.composeXml(2);
-
- log.info(xml);
-
- FileWriter writer = null;
try {
- writer = new FileWriter(toSave);
- writer.write(xml);
- } catch (IOException eee) {
- throwMascTechnicalException("Failed to write exp design xml file", eee);
- } finally {
- if (writer != null) {
- try {
- writer.close();
- } catch (IOException eee) {
- throwMascTechnicalException("Failed to close exp design xml file", eee);
- }
+ ExperienceDesignXmlWriter writer = new ExperienceDesignXmlWriter(toSave, experienceDesign);
+ try {
+ writer.write();
+ } finally {
+ writer.close();
}
+ } catch (IOException eee) {
+ throwMascTechnicalException("Failed to write experiment design xml file", eee);
}
}
public void saveInputDesign(InputDesign inputDesign, File toSave) {
- InputDesignXmlWriter inputDesignXmlWriter = new InputDesignXmlWriter(inputDesign);
- String xml = inputDesignXmlWriter.composeXml(2);
-
- log.info(xml);
-
- FileWriter writer = null;
try {
- writer = new FileWriter(toSave);
- writer.write(xml);
- } catch (IOException eee) {
- throwMascTechnicalException("Failed to write exp design xml file", eee);
- } finally {
- if (writer != null) {
- try {
- writer.close();
- } catch (IOException eee) {
- throwMascTechnicalException("Failed to close exp design xml file", eee);
- }
+ InputDesignXmlWriter writer = new InputDesignXmlWriter(toSave, inputDesign);
+ try {
+ writer.write();
+ } finally {
+ writer.close();
}
+ } catch (IOException eee) {
+ throwMascTechnicalException("Failed to write input design xml file", eee);
}
}
- public class ExperienceDesignXmlWriter {
-
- protected ExperienceDesign model;
-
- public ExperienceDesignXmlWriter(ExperienceDesign model) {
- this.model = model;
- }
-
- public String composeXml(int indent) {
-
- return getRootElement().toXml(indent);
- }
-
- public Element getRootElement() {
-
- Element rootElement = new Element(ExperienceDesign.class.getSimpleName());
- composeExperienceDesignMeta(rootElement);
- composeFactors(rootElement);
-
- // TODO sletellier 2011/12/14 : implement workflow
- // composeWorkFlow(rootElement);
-
- return rootElement;
- }
-
- protected void composeExperienceDesignMeta(Element rootElement) {
-
- // date
- Date date = model.getDate();
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- String formatedDate = dateFormat.format(date);
- addParameter(rootElement, ExperienceDesign.PROPERTY_DATE, formatedDate);
-
- addParameter(rootElement, ExperienceDesign.PROPERTY_ID, model.getId());
- addParameter(rootElement, ExperienceDesign.PROPERTY_AUTHOR, model.getAuthor());
- addParameter(rootElement, ExperienceDesign.PROPERTY_LICENCE, model.getLicence());
-
- // description
- String description = model.getDescription();
- if (StringUtils.isNotEmpty(description)) {
- Element.createElement(rootElement, ExperienceDesign.PROPERTY_DESCRIPTION, description);
- }
- }
-
- protected void composeFactors(Element rootElement) {
- Collection<Factor> factors = model.getFactors();
-
- // do nothing if no factors in model
- if (factors.isEmpty()) {
- return;
- }
-
- // creating factors node
- Element factorsElement = Element.createElement(rootElement, ExperienceDesign.PROPERTY_FACTORS);
- for (Factor factor : factors) {
-
- // factor
- Element factorElement = Element.createElement(factorsElement, Factor.class.getSimpleName());
- addParameter(factorElement, Factor.PROPERTY_ID, factor.getId());
- addParameter(factorElement,Factor.PROPERTY_NAME, factor.getName());
- addParameter(factorElement, Factor.PROPERTY_UNIT, factor.getUnit());
-
- // description
- String description = model.getDescription();
- if (StringUtils.isNotEmpty(description)) {
- Element.createElement(factorElement, Factor.PROPERTY_DESCRIPTION, factor.getDescription());
- }
-
- // domain
- Domain domain = factor.getDomain();
- if (domain != null) {
- Element domainElement = Element.createElement(factorElement, Factor.PROPERTY_DOMAIN);
- addParameter(domainElement, Domain.PROPERTY_NAME, domain.getName());
- addParameter(domainElement, Domain.PROPERTY_DISTRIBUTION_PARAMETER, domain.getDistributionParameter());
- addParameter(domainElement, Domain.PROPERTY_LEVEL, String.valueOf(domain.getLevel()));
- addParameter(domainElement, Domain.PROPERTY_VALUE_TYPE, domain.getValueType());
- addParameter(domainElement, Domain.PROPERTY_NOMINAL_VALUE, domain.getNominalValue());
- }
-
- // features
- addAllFeature(factorElement, factor.getFeatures());
- }
- }
-
- protected void addAllFeature(Element factorElement, Collection<Feature> features) {
- if (features != null) {
- for (Feature feature : features) {
- Element featureElement = Element.createElement(factorElement, Factor.PROPERTY_FEATURES);
- addParameter(featureElement, Feature.PROPERTY_NAME, feature.getName());
- addParameter(featureElement, Feature.PROPERTY_VALUE, feature.getValue());
- addParameter(featureElement, Feature.PROPERTY_VALUE_TYPE, feature.getValueType());
- }
- }
- }
-
- protected void addParameter(Element element, String parameterName, Object value) {
- if (value != null) {
- element.addParameter(parameterName, value.toString());
- }
- }
- }
-
- public class InputDesignXmlWriter extends ExperienceDesignXmlWriter{
-
- protected InputDesign model;
-
- public InputDesignXmlWriter(InputDesign model) {
- super(model.getExperienceDesign());
- this.model = model;
- }
-
- @Override
- public String composeXml(int indent) {
-
- Element rootElement = new Element(InputDesign.class.getSimpleName());
- composeInputDesignMeta(rootElement);
- composeScenarios(rootElement);
-
- return rootElement.toXml(indent);
- }
-
- protected void composeInputDesignMeta(Element rootElement) {
-
- // date
- Date date = model.getDate();
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
- String formatedDate = dateFormat.format(date);
- addParameter(rootElement, InputDesign.PROPERTY_DATE, formatedDate);
-
- // experiement design
- rootElement.add(getRootElement());
- }
-
- protected void composeScenarios(Element rootElement) {
-
- // scenarios
- for (Scenario scenario : model.getScenarios()) {
- Element scenariosElement = Element.createElement(rootElement, InputDesign.PROPERTY_SCENARIOS);
- addParameter(scenariosElement, Scenario.PROPERTY_NAME, scenario.getName());
- addParameter(scenariosElement, Scenario.PROPERTY_ORDER_NUMBER, scenario.getOrderNumber());
-
- // factor values
- Map<Factor,Object> factorValues = scenario.getFactorValues();
- for (Map.Entry<Factor,Object> entry : factorValues.entrySet()) {
- Object value = entry.getValue();
- Element factorValueElement = Element.createElement(scenariosElement, Scenario.PROPERTY_FACTOR_VALUES, String.valueOf(value));
- factorValueElement.addParameter(Factor.class.getSimpleName(), entry.getKey().getId());
- }
-
- // features
- addAllFeature(scenariosElement, scenario.getFeatures());
- }
- }
- }
}
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java 2011-12-14 15:37:31 UTC (rev 519)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -1,47 +1,13 @@
package fr.inra.masc.services;
-import com.google.common.collect.LinkedListMultimap;
-import com.google.common.collect.Multimap;
-import fr.inra.masc.io.Element;
-import fr.inra.masc.model.ComputableCriteria;
-import fr.inra.masc.model.Criteria;
-import fr.inra.masc.model.Function;
+import fr.inra.masc.io.writer.DexiXmlWriter;
import fr.inra.masc.model.MascModel;
-import fr.inra.masc.model.Option;
-import fr.inra.masc.model.OptionValue;
-import fr.inra.masc.model.ScaleValue;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-import static fr.inra.masc.model.MascXmlConstant.ATTRIBUTE;
-import static fr.inra.masc.model.MascXmlConstant.CRITERIA_DESCRIPTION;
-import static fr.inra.masc.model.MascXmlConstant.CRITERIA_NAME;
-import static fr.inra.masc.model.MascXmlConstant.DEXI;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_CONSIST;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_ENTERED;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_LOW;
-import static fr.inra.masc.model.MascXmlConstant.FUNCTION_WEIGHTS;
-import static fr.inra.masc.model.MascXmlConstant.LINE;
-import static fr.inra.masc.model.MascXmlConstant.MODEL_DESCRIPTION;
-import static fr.inra.masc.model.MascXmlConstant.MODEL_NAME;
-import static fr.inra.masc.model.MascXmlConstant.OPTION;
-import static fr.inra.masc.model.MascXmlConstant.SCALE;
-import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE;
-import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_DESCRIPTION;
-import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_GROUP;
-import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_NAME;
-import static fr.inra.masc.model.MascXmlConstant.SETTINGS;
-
/**
* Service to save masc model to DEXi xml file
*
@@ -60,153 +26,16 @@
public void saveModel(MascModel model, File saveFile) {
- DexiXmlWriter dexiXmlWriter = new DexiXmlWriter(model);
- String xml = dexiXmlWriter.composeXml(2);
-
- FileWriter writer = null;
try {
- writer = new FileWriter(saveFile);
- writer.write(xml);
+ DexiXmlWriter writer = new DexiXmlWriter(saveFile, model);
+ try {
+ writer.write();
+ } finally {
+ writer.close();
+ }
} catch (IOException eee) {
throwMascTechnicalException("Failed to write DEXi xml file", eee);
- } finally {
- if (writer != null) {
- try {
- writer.close();
- } catch (IOException eee) {
- throwMascTechnicalException("Failed to close DEXi xml file", eee);
- }
- }
}
}
- protected class DexiXmlWriter {
-
- protected MascModel model;
- protected Multimap<Criteria, OptionValue> criteriaOptionValues;
-
- public DexiXmlWriter(MascModel model) {
- this.model = model;
- this.criteriaOptionValues = LinkedListMultimap.create();
- }
-
- public String composeXml(int indent) {
- Element rootElement = new Element(DEXI);
- composeMeta(rootElement);
- composeAttributes(rootElement);
-
- return rootElement.toXml(indent);
- }
-
-
- protected void composeMeta(Element rootElement) {
-
- // model name
- add(rootElement, MODEL_NAME, model.getName());
-
- // model description
- Element descriptionElement = createElement(rootElement, MODEL_DESCRIPTION);
- for (String line : model.getDescription()) {
- add(descriptionElement, LINE, line);
- }
-
- // options
- for (Option option : model.getOption()) {
- add(rootElement, OPTION, option.getName());
-
- // load all option values
- for (OptionValue optionValue : option.getOptionValue()) {
-
- // fill map
- Criteria criteria = optionValue.getCriteria();
- criteriaOptionValues.put(criteria, optionValue);
- }
- }
-
- // settings
- Map<String,String> settings = model.getSettings();
- if (MapUtils.isNotEmpty(settings)) {
- Element settingElement = createElement(rootElement, SETTINGS);
- for (String settingName : settings.keySet()) {
- String settingsValue = settings.get(settingName);
- add(settingElement, settingName, settingsValue);
- }
- }
- }
-
- protected void composeAttributes(Element rootElement) {
- Collection<Criteria> criterias = model.getCriteria();
- if (CollectionUtils.isNotEmpty(criterias)) {
- for (Criteria criteria : criterias) {
- composeAttribute(criteria, rootElement);
- }
- }
- }
-
- protected void composeAttribute(Criteria criteria, Element rootElement) {
- Element attributeElement = createElement(rootElement, ATTRIBUTE);
-
- // attribute name
- add(attributeElement, CRITERIA_NAME, criteria.getName());
-
- // attribute description
- add(attributeElement, CRITERIA_DESCRIPTION, criteria.getDescription());
-
- // scale
- Element scaleElement = createElement(attributeElement, SCALE);
-
- // scale values
- for (ScaleValue scaleValue : criteria.getScale()) {
- Element scaleValueElement = createElement(scaleElement, SCALE_VALUE);
- add(scaleValueElement, SCALE_VALUE_NAME, scaleValue.getName());
- add(scaleValueElement, SCALE_VALUE_DESCRIPTION, scaleValue.getDescription());
- add(scaleValueElement, SCALE_VALUE_GROUP, scaleValue.getGroup());
- }
-
- // function
- if (criteria instanceof ComputableCriteria) {
- ComputableCriteria computableCriteria = (ComputableCriteria) criteria;
- Element functionElement = createElement(attributeElement, FUNCTION);
- Function function = computableCriteria.getFunction();
- add(functionElement, FUNCTION_LOW, function.getLow());
- add(functionElement, FUNCTION_ENTERED, function.getEntered());
- add(functionElement, FUNCTION_WEIGHTS, function.getWeights());
- add(functionElement, FUNCTION_CONSIST, function.getConsist());
- }
-
- // options
- Collection<OptionValue> optionValues = criteriaOptionValues.get(criteria);
- for (OptionValue optionValue : optionValues) {
- add(attributeElement, OPTION, optionValue.getValue());
- }
-
- // children
- for (Criteria child : criteria.getChildren()) {
- composeAttribute(child, attributeElement);
- }
- }
-
- protected void add(Element parentElement, String tagName, Object value) {
- if (value != null) {
- String toString = value.toString();
-
- // boolean are capitalized in masc xml file
- if (value instanceof Boolean) {
- toString = StringUtils.capitalize(toString);
- }
- createElement(parentElement, tagName, toString);
- }
- }
-
- // Override to upper case tagNames
- public Element createElement(Element parentElement, String tagName) {
- return createElement(parentElement, tagName, null);
- }
-
- public Element createElement(Element parentElement, String tagName, String text) {
- Element element = Element.createElement(tagName.toUpperCase(), text);
- parentElement.add(element);
- return element;
- }
- }
}
Added: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java (rev 0)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoLoadModelServiceTest.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -0,0 +1,51 @@
+package fr.inra.masc.services;
+
+import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.inra.masc.model.MascModel;
+import org.junit.Test;
+
+import java.io.File;
+
+/**
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class MexicoLoadModelServiceTest extends AbstractServiceTest {
+
+ @Test
+ public void testLoadExperienceDesignModel() throws Exception {
+ MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
+ File dexiTestFile = getDexiTestFile();
+ MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
+ ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
+
+ File savedFile = new File(testWorkDir, "experienceDesignTestFileResult.xml");
+ getService(MexicoSaveModelService.class).saveExperienceDesign(experienceDesign, savedFile);
+
+ ExperienceDesign loadedExperienceDesign = getService(MexicoLoadModelService.class).loadExperienceDesignModel(savedFile);
+ assertExperimentDesignEqual(experienceDesign, loadedExperienceDesign);
+ }
+
+ @Test
+ public void testLoadInputDesignDesignModel() throws Exception {
+ File dexiTestFile = getDexiTestFile();
+ MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
+ MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
+ ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
+ InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experienceDesign);
+
+ File savedFile = new File(testWorkDir, "inputDesignTestFileResult.xml");
+ getService(MexicoSaveModelService.class).saveInputDesign(inputDesign, savedFile);
+
+ InputDesign loadedInputDesign = getService(MexicoLoadModelService.class).loadInputDesignDesignModel(savedFile);
+
+ assertExperimentDesignEqual(inputDesign.getExperienceDesign(), loadedInputDesign.getExperienceDesign());
+ assertEquals(inputDesign.getScenarios().size(), loadedInputDesign.getScenarios().size());
+ }
+
+ protected void assertExperimentDesignEqual(ExperienceDesign expectedExperienceDesign, ExperienceDesign experienceDesign) {
+ assertEquals(expectedExperienceDesign.getId(), experienceDesign.getId());
+ assertEquals(expectedExperienceDesign.getFactors().size(), experienceDesign.getFactors().size());
+ }
+}
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java 2011-12-14 15:37:31 UTC (rev 519)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java 2011-12-15 10:31:40 UTC (rev 520)
@@ -20,7 +20,7 @@
MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
- File savedFile = new File(testWorkDir, "ExperienceDesignTestFileResult.xml");
+ File savedFile = new File(testWorkDir, "experienceDesignTestFileResult.xml");
getService(MexicoSaveModelService.class).saveExperienceDesign(experienceDesign, savedFile);
}
1
0
r519 - in masc/masc-api/src: main/java/fr/inra/masc main/java/fr/inra/masc/io main/java/fr/inra/masc/services test/java/fr/inra/masc/services
by sletellier@users.nuiton.org 14 Dec '11
by sletellier@users.nuiton.org 14 Dec '11
14 Dec '11
Author: sletellier
Date: 2011-12-14 16:37:31 +0100 (Wed, 14 Dec 2011)
New Revision: 519
Url: http://nuiton.org/repositories/revision/sandbox/519
Log:
- Improve Element to write xml
- Write mexico xml files
- Write tests
Added:
masc/masc-api/src/main/java/fr/inra/masc/io/
masc/masc-api/src/main/java/fr/inra/masc/io/Element.java
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
Modified:
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java
masc/masc-api/src/test/java/fr/inra/masc/services/SaveModelServiceTest.java
Added: masc/masc-api/src/main/java/fr/inra/masc/io/Element.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/io/Element.java (rev 0)
+++ masc/masc-api/src/main/java/fr/inra/masc/io/Element.java 2011-12-14 15:37:31 UTC (rev 519)
@@ -0,0 +1,115 @@
+package fr.inra.masc.io;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Represent an XML node
+ *
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class Element {
+
+ public static final String XML_META = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ public static final String CLOSED_TAG = "%s<%s%s/>\n";
+ public static final String START_TAG = "%s<%s%s>";
+ public static final String END_TAG = "%s</%s>\n";
+
+ protected LinkedList<Element> children;
+ protected Map<String, String> parameters;
+ protected String tagName;
+ protected String text;
+
+ public Element(String tagName) {
+ this(tagName, null);
+ }
+
+ public Element(String tagName, String text) {
+ this.tagName = tagName;
+ this.text = text;
+ this.children = Lists.newLinkedList();
+ this.parameters = Maps.newHashMap();
+ }
+
+ public void add(Element e) {
+ this.children.add(e);
+ }
+
+ public void addParameter(String name, String value) {
+ this.parameters.put(name, value);
+ }
+
+ public String toXml(int indent) {
+ StringBuilder stringBuilder = new StringBuilder(XML_META).append("\n");
+ buildXml(-indent, indent, stringBuilder);
+ return stringBuilder.toString();
+ }
+
+ protected void buildXml(int start, int indent, StringBuilder stringBuilder) {
+
+ // closed tag if content is empty
+ if (children.isEmpty() && StringUtils.isEmpty(text)) {
+ addToBuilder(stringBuilder, CLOSED_TAG, getIndentPrefix(start, indent), tagName);
+ return;
+ }
+
+ // start tag
+ addToBuilder(stringBuilder, START_TAG, getIndentPrefix(start, indent), tagName);
+ if (StringUtils.isNotEmpty(text)) {
+
+ // end inline tag
+ addToBuilder(stringBuilder, END_TAG, StringEscapeUtils.escapeXml(text), tagName);
+ } else {
+ stringBuilder.append("\n");
+ for (Element child : children) {
+ child.buildXml(start + indent, indent, stringBuilder);
+ }
+ // end tag
+ addToBuilder(stringBuilder, END_TAG, getIndentPrefix(start, indent), tagName);
+ }
+ }
+
+ protected void addToBuilder(StringBuilder stringBuilder, String template, String prefix, String tagName) {
+ stringBuilder.append(String.format(template, prefix, tagName, getParametersAsString()));
+ }
+
+ protected String getIndentPrefix(int start, int lenght) {
+ String result = "";
+ for (int i=0;i<start + lenght;i++) {
+ result += " ";
+ }
+ return result;
+ }
+
+ protected String getParametersAsString() {
+ StringBuilder builder = new StringBuilder();
+ Set<Map.Entry<String,String>> entries = parameters.entrySet();
+ for (Map.Entry<String,String> entry : entries) {
+
+ // add to builder param like : name="value"
+ builder.append(" ").append(entry.getKey()).append("=\"").append(entry.getValue()).append("\"");
+ }
+ return builder.toString();
+ }
+
+ public static Element createElement(Element parentElement, String tagName) {
+ return createElement(parentElement, tagName, null);
+ }
+
+ public static Element createElement(Element parentElement, String tagName, String text) {
+ Element element = createElement(tagName, text);
+ parentElement.add(element);
+ return element;
+ }
+
+ public static Element createElement(String tagName, String text) {
+ return new Element(tagName, text);
+ }
+}
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-14 10:05:14 UTC (rev 518)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoSaveModelService.java 2011-12-14 15:37:31 UTC (rev 519)
@@ -1,13 +1,29 @@
package fr.inra.masc.services;
+import fr.ifremer.mexico.model.Domain;
import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.Factor;
+import fr.ifremer.mexico.model.Feature;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.ifremer.mexico.model.Scenario;
+import fr.inra.masc.io.Element;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Map;
/**
+ * Service to save mexico model to mexico xml file
+ *
* @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
*/
public class MexicoSaveModelService extends MascService {
@@ -19,15 +35,206 @@
return log;
}
- public File saveExperienceDesign(ExperienceDesign mexicoModel, File toSave) {
+ public void saveExperienceDesign(ExperienceDesign experienceDesign, File toSave) {
- // TODO sletellier : write mexico experience design xml file
- return toSave;
+ ExperienceDesignXmlWriter experienceDesignXmlWriter = new ExperienceDesignXmlWriter(experienceDesign);
+ String xml = experienceDesignXmlWriter.composeXml(2);
+
+ log.info(xml);
+
+ FileWriter writer = null;
+ try {
+ writer = new FileWriter(toSave);
+ writer.write(xml);
+ } catch (IOException eee) {
+ throwMascTechnicalException("Failed to write exp design xml file", eee);
+ } finally {
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (IOException eee) {
+ throwMascTechnicalException("Failed to close exp design xml file", eee);
+ }
+ }
+ }
}
- public File saveInputDesignDesign(ExperienceDesign mexicoModel, File toSave) {
+ public void saveInputDesign(InputDesign inputDesign, File toSave) {
- // TODO sletellier : write mexico input design xml file
- return toSave;
+ InputDesignXmlWriter inputDesignXmlWriter = new InputDesignXmlWriter(inputDesign);
+ String xml = inputDesignXmlWriter.composeXml(2);
+
+ log.info(xml);
+
+ FileWriter writer = null;
+ try {
+ writer = new FileWriter(toSave);
+ writer.write(xml);
+ } catch (IOException eee) {
+ throwMascTechnicalException("Failed to write exp design xml file", eee);
+ } finally {
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (IOException eee) {
+ throwMascTechnicalException("Failed to close exp design xml file", eee);
+ }
+ }
+ }
}
+
+ public class ExperienceDesignXmlWriter {
+
+ protected ExperienceDesign model;
+
+ public ExperienceDesignXmlWriter(ExperienceDesign model) {
+ this.model = model;
+ }
+
+ public String composeXml(int indent) {
+
+ return getRootElement().toXml(indent);
+ }
+
+ public Element getRootElement() {
+
+ Element rootElement = new Element(ExperienceDesign.class.getSimpleName());
+ composeExperienceDesignMeta(rootElement);
+ composeFactors(rootElement);
+
+ // TODO sletellier 2011/12/14 : implement workflow
+ // composeWorkFlow(rootElement);
+
+ return rootElement;
+ }
+
+ protected void composeExperienceDesignMeta(Element rootElement) {
+
+ // date
+ Date date = model.getDate();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ String formatedDate = dateFormat.format(date);
+ addParameter(rootElement, ExperienceDesign.PROPERTY_DATE, formatedDate);
+
+ addParameter(rootElement, ExperienceDesign.PROPERTY_ID, model.getId());
+ addParameter(rootElement, ExperienceDesign.PROPERTY_AUTHOR, model.getAuthor());
+ addParameter(rootElement, ExperienceDesign.PROPERTY_LICENCE, model.getLicence());
+
+ // description
+ String description = model.getDescription();
+ if (StringUtils.isNotEmpty(description)) {
+ Element.createElement(rootElement, ExperienceDesign.PROPERTY_DESCRIPTION, description);
+ }
+ }
+
+ protected void composeFactors(Element rootElement) {
+ Collection<Factor> factors = model.getFactors();
+
+ // do nothing if no factors in model
+ if (factors.isEmpty()) {
+ return;
+ }
+
+ // creating factors node
+ Element factorsElement = Element.createElement(rootElement, ExperienceDesign.PROPERTY_FACTORS);
+ for (Factor factor : factors) {
+
+ // factor
+ Element factorElement = Element.createElement(factorsElement, Factor.class.getSimpleName());
+ addParameter(factorElement, Factor.PROPERTY_ID, factor.getId());
+ addParameter(factorElement,Factor.PROPERTY_NAME, factor.getName());
+ addParameter(factorElement, Factor.PROPERTY_UNIT, factor.getUnit());
+
+ // description
+ String description = model.getDescription();
+ if (StringUtils.isNotEmpty(description)) {
+ Element.createElement(factorElement, Factor.PROPERTY_DESCRIPTION, factor.getDescription());
+ }
+
+ // domain
+ Domain domain = factor.getDomain();
+ if (domain != null) {
+ Element domainElement = Element.createElement(factorElement, Factor.PROPERTY_DOMAIN);
+ addParameter(domainElement, Domain.PROPERTY_NAME, domain.getName());
+ addParameter(domainElement, Domain.PROPERTY_DISTRIBUTION_PARAMETER, domain.getDistributionParameter());
+ addParameter(domainElement, Domain.PROPERTY_LEVEL, String.valueOf(domain.getLevel()));
+ addParameter(domainElement, Domain.PROPERTY_VALUE_TYPE, domain.getValueType());
+ addParameter(domainElement, Domain.PROPERTY_NOMINAL_VALUE, domain.getNominalValue());
+ }
+
+ // features
+ addAllFeature(factorElement, factor.getFeatures());
+ }
+ }
+
+ protected void addAllFeature(Element factorElement, Collection<Feature> features) {
+ if (features != null) {
+ for (Feature feature : features) {
+ Element featureElement = Element.createElement(factorElement, Factor.PROPERTY_FEATURES);
+ addParameter(featureElement, Feature.PROPERTY_NAME, feature.getName());
+ addParameter(featureElement, Feature.PROPERTY_VALUE, feature.getValue());
+ addParameter(featureElement, Feature.PROPERTY_VALUE_TYPE, feature.getValueType());
+ }
+ }
+ }
+
+ protected void addParameter(Element element, String parameterName, Object value) {
+ if (value != null) {
+ element.addParameter(parameterName, value.toString());
+ }
+ }
+ }
+
+ public class InputDesignXmlWriter extends ExperienceDesignXmlWriter{
+
+ protected InputDesign model;
+
+ public InputDesignXmlWriter(InputDesign model) {
+ super(model.getExperienceDesign());
+ this.model = model;
+ }
+
+ @Override
+ public String composeXml(int indent) {
+
+ Element rootElement = new Element(InputDesign.class.getSimpleName());
+ composeInputDesignMeta(rootElement);
+ composeScenarios(rootElement);
+
+ return rootElement.toXml(indent);
+ }
+
+ protected void composeInputDesignMeta(Element rootElement) {
+
+ // date
+ Date date = model.getDate();
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ String formatedDate = dateFormat.format(date);
+ addParameter(rootElement, InputDesign.PROPERTY_DATE, formatedDate);
+
+ // experiement design
+ rootElement.add(getRootElement());
+ }
+
+ protected void composeScenarios(Element rootElement) {
+
+ // scenarios
+ for (Scenario scenario : model.getScenarios()) {
+ Element scenariosElement = Element.createElement(rootElement, InputDesign.PROPERTY_SCENARIOS);
+ addParameter(scenariosElement, Scenario.PROPERTY_NAME, scenario.getName());
+ addParameter(scenariosElement, Scenario.PROPERTY_ORDER_NUMBER, scenario.getOrderNumber());
+
+ // factor values
+ Map<Factor,Object> factorValues = scenario.getFactorValues();
+ for (Map.Entry<Factor,Object> entry : factorValues.entrySet()) {
+ Object value = entry.getValue();
+ Element factorValueElement = Element.createElement(scenariosElement, Scenario.PROPERTY_FACTOR_VALUES, String.valueOf(value));
+ factorValueElement.addParameter(Factor.class.getSimpleName(), entry.getKey().getId());
+ }
+
+ // features
+ addAllFeature(scenariosElement, scenario.getFeatures());
+ }
+ }
+ }
}
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java 2011-12-14 10:05:14 UTC (rev 518)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java 2011-12-14 15:37:31 UTC (rev 519)
@@ -1,8 +1,8 @@
package fr.inra.masc.services;
import com.google.common.collect.LinkedListMultimap;
-import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
+import fr.inra.masc.io.Element;
import fr.inra.masc.model.ComputableCriteria;
import fr.inra.masc.model.Criteria;
import fr.inra.masc.model.Function;
@@ -12,7 +12,6 @@
import fr.inra.masc.model.ScaleValue;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -21,7 +20,6 @@
import java.io.FileWriter;
import java.io.IOException;
import java.util.Collection;
-import java.util.LinkedList;
import java.util.Map;
import static fr.inra.masc.model.MascXmlConstant.ATTRIBUTE;
@@ -45,7 +43,7 @@
import static fr.inra.masc.model.MascXmlConstant.SETTINGS;
/**
- * Service to save masc model
+ * Service to save masc model to DEXi xml file
*
* @author sletellier <letellier(a)codelutin.com>
* @since 0.1
@@ -63,20 +61,20 @@
public void saveModel(MascModel model, File saveFile) {
DexiXmlWriter dexiXmlWriter = new DexiXmlWriter(model);
- Element xml = dexiXmlWriter.composeXml();
+ String xml = dexiXmlWriter.composeXml(2);
FileWriter writer = null;
try {
writer = new FileWriter(saveFile);
- writer.write(xml.toXml(2));
+ writer.write(xml);
} catch (IOException eee) {
- throwMascTechnicalException("Failed to write document", eee);
+ throwMascTechnicalException("Failed to write DEXi xml file", eee);
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException eee) {
- throwMascTechnicalException("Failed to close document", eee);
+ throwMascTechnicalException("Failed to close DEXi xml file", eee);
}
}
}
@@ -92,12 +90,12 @@
this.criteriaOptionValues = LinkedListMultimap.create();
}
- public Element composeXml() {
+ public String composeXml(int indent) {
Element rootElement = new Element(DEXI);
composeMeta(rootElement);
composeAttributes(rootElement);
- return rootElement;
+ return rootElement.toXml(indent);
}
@@ -200,81 +198,15 @@
}
}
- protected Element createElement(Element parentElement, String tagName) {
+ // Override to upper case tagNames
+ public Element createElement(Element parentElement, String tagName) {
return createElement(parentElement, tagName, null);
}
-
- protected Element createElement(Element parentElement, String tagName, String text) {
- Element element = createElement(tagName.toUpperCase(), text);
+
+ public Element createElement(Element parentElement, String tagName, String text) {
+ Element element = Element.createElement(tagName.toUpperCase(), text);
parentElement.add(element);
return element;
}
-
- protected Element createElement(String tagName, String text) {
- return new Element(tagName, text);
- }
-
}
-
- protected class Element {
-
- public static final String XML_META = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
-
- protected LinkedList<Element> children;
- protected String tagName;
- protected String text;
-
- public Element(String tagName) {
- this(tagName, null);
- }
-
- public Element(String tagName, String text) {
- this.tagName = tagName;
- this.text = text;
- this.children = Lists.newLinkedList();
- }
-
- public void add(Element e) {
- this.children.add(e);
- }
-
- public String toXml(int indent) {
- StringBuilder stringBuilder = new StringBuilder(XML_META).append("\n");
- buildXml(-indent, indent, stringBuilder);
- return stringBuilder.toString();
- }
-
- protected void buildXml(int start, int indent, StringBuilder stringBuilder) {
-
- // closed tag if content is empty
- if (children.isEmpty() && StringUtils.isEmpty(text)) {
- stringBuilder.append(getIndentPrefix(start, indent)).append("<").append(tagName).append("/>").append("\n");
- return;
- }
-
- // start tag
- stringBuilder.append(getIndentPrefix(start, indent)).append("<").append(tagName).append(">");
- if (StringUtils.isNotEmpty(text)) {
- stringBuilder.append(StringEscapeUtils.escapeXml(text));
-
- // end inline tag
- stringBuilder.append("</").append(tagName).append(">").append("\n");
- } else {
- stringBuilder.append("\n");
- for (Element child : children) {
- child.buildXml(start + indent, indent, stringBuilder);
- }
- // end tag
- stringBuilder.append(getIndentPrefix(start, indent)).append("</").append(tagName).append(">").append("\n");
- }
- }
-
- protected String getIndentPrefix(int start, int lenght) {
- String result = "";
- for (int i=0;i<start + lenght;i++) {
- result += " ";
- }
- return result;
- }
- }
}
Added: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java (rev 0)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoSaveModelServiceTest.java 2011-12-14 15:37:31 UTC (rev 519)
@@ -0,0 +1,38 @@
+package fr.inra.masc.services;
+
+import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.inra.masc.model.MascModel;
+import org.junit.Test;
+
+import java.io.File;
+
+/**
+ * @author sletellier <letellier(a)codelutin.com>
+ * @since 0.1
+ */
+public class MexicoSaveModelServiceTest extends AbstractServiceTest {
+
+ @Test
+ public void testSaveExperienceDesign() throws Exception {
+ MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
+ File dexiTestFile = getDexiTestFile();
+ MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
+ ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
+
+ File savedFile = new File(testWorkDir, "ExperienceDesignTestFileResult.xml");
+ getService(MexicoSaveModelService.class).saveExperienceDesign(experienceDesign, savedFile);
+ }
+
+ @Test
+ public void testSaveInputDesign() throws Exception {
+ File dexiTestFile = getDexiTestFile();
+ MascModel mascModel = getService(LoadModelService.class).loadModel(dexiTestFile);
+ MexicoModelConvertorService mexicoModelConvertorService = getService(MexicoModelConvertorService.class);
+ ExperienceDesign experienceDesign = mexicoModelConvertorService.convertMascModelToMexicoExperienceDesignModel(mascModel);
+ InputDesign inputDesign = mexicoModelConvertorService.convertMascModelToMexicoInputDesignModel(mascModel, experienceDesign);
+
+ File savedFile = new File(testWorkDir, "inputDesignTestFileResult.xml");
+ getService(MexicoSaveModelService.class).saveInputDesign(inputDesign, savedFile);
+ }
+}
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/SaveModelServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/SaveModelServiceTest.java 2011-12-14 10:05:14 UTC (rev 518)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/SaveModelServiceTest.java 2011-12-14 15:37:31 UTC (rev 519)
@@ -3,7 +3,6 @@
import fr.inra.masc.model.MascModel;
import org.apache.commons.io.FileUtils;
import org.custommonkey.xmlunit.Diff;
-import org.junit.Ignore;
import org.junit.Test;
import org.xml.sax.SAXException;
@@ -16,7 +15,6 @@
public class SaveModelServiceTest extends AbstractServiceTest {
@Test
- @Ignore // TODO sletellier 20111209 : fix line separator
public void testSaveModelWithDexiTestModelFile() throws Exception {
File dexiTestFile = getDexiModelTestFile();
@@ -46,6 +44,9 @@
String input = FileUtils.readFileToString(in);
String output = FileUtils.readFileToString(out);
+ // Hack to don't take care of end of line char
+ input = input.replaceAll("\r\n", "\n");
+
assertEquals(input.trim(), output.trim());
Diff myDiff = new Diff(input, output);
1
0
r518 - in masc/masc-api/src: main/java/fr/inra/masc main/java/fr/inra/masc/services main/xmi test/java/fr/inra/masc/services
by sletellier@users.nuiton.org 14 Dec '11
by sletellier@users.nuiton.org 14 Dec '11
14 Dec '11
Author: sletellier
Date: 2011-12-14 11:05:14 +0100 (Wed, 14 Dec 2011)
New Revision: 518
Url: http://nuiton.org/repositories/revision/sandbox/518
Log:
Optimize imports
Modified:
masc/masc-api/src/main/java/fr/inra/masc/MascConfig.java
masc/masc-api/src/main/java/fr/inra/masc/services/DexiInvokerService.java
masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java
masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java
masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java
masc/masc-api/src/main/xmi/mexico.zargo
masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java
Modified: masc/masc-api/src/main/java/fr/inra/masc/MascConfig.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/MascConfig.java 2011-12-12 16:59:10 UTC (rev 517)
+++ masc/masc-api/src/main/java/fr/inra/masc/MascConfig.java 2011-12-14 10:05:14 UTC (rev 518)
@@ -1,14 +1,23 @@
package fr.inra.masc;
import com.google.common.base.Preconditions;
-import com.google.common.collect.*;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.util.*;
+import org.nuiton.util.ApplicationConfig;
+import org.nuiton.util.ArgumentsParserException;
+import org.nuiton.util.FileUtil;
+import org.nuiton.util.Version;
+import org.nuiton.util.VersionUtil;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.List;
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/DexiInvokerService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/DexiInvokerService.java 2011-12-12 16:59:10 UTC (rev 517)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/DexiInvokerService.java 2011-12-14 10:05:14 UTC (rev 518)
@@ -1,6 +1,5 @@
package fr.inra.masc.services;
-import fr.inra.masc.MascTechnicalException;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.logging.Log;
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java 2011-12-12 16:59:10 UTC (rev 517)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/LoadModelService.java 2011-12-14 10:05:14 UTC (rev 518)
@@ -2,7 +2,23 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
-import fr.inra.masc.model.*;
+import fr.inra.masc.model.ComputableCriteria;
+import fr.inra.masc.model.ComputableCriteriaImpl;
+import fr.inra.masc.model.Criteria;
+import fr.inra.masc.model.Function;
+import fr.inra.masc.model.FunctionImpl;
+import fr.inra.masc.model.MascModel;
+import fr.inra.masc.model.MascModelImpl;
+import fr.inra.masc.model.Option;
+import fr.inra.masc.model.OptionImpl;
+import fr.inra.masc.model.OptionValue;
+import fr.inra.masc.model.OptionValueImpl;
+import fr.inra.masc.model.ScaleGroup;
+import fr.inra.masc.model.ScaleValue;
+import fr.inra.masc.model.ScaleValueImpl;
+import fr.inra.masc.model.ThresholdCriteria;
+import fr.inra.masc.model.ThresholdCriteriaImpl;
+import fr.inra.masc.model.ValuedCriteriaImpl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xmlpull.v1.XmlPullParser;
@@ -13,9 +29,31 @@
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
-import static fr.inra.masc.model.MascXmlConstant.*;
+import static fr.inra.masc.model.MascXmlConstant.ATTRIBUTE;
+import static fr.inra.masc.model.MascXmlConstant.CRITERIA_DESCRIPTION;
+import static fr.inra.masc.model.MascXmlConstant.CRITERIA_NAME;
+import static fr.inra.masc.model.MascXmlConstant.DEXI;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_CONSIST;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_ENTERED;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_LOW;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_WEIGHTS;
+import static fr.inra.masc.model.MascXmlConstant.LINE;
+import static fr.inra.masc.model.MascXmlConstant.MODEL_DESCRIPTION;
+import static fr.inra.masc.model.MascXmlConstant.MODEL_NAME;
+import static fr.inra.masc.model.MascXmlConstant.OPTION;
+import static fr.inra.masc.model.MascXmlConstant.SCALE;
+import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_DESCRIPTION;
+import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_GROUP;
+import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_NAME;
+import static fr.inra.masc.model.MascXmlConstant.SETTINGS;
/**
* Service use to parse mascXmlFile and build MascModel corresponding
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java 2011-12-12 16:59:10 UTC (rev 517)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/MexicoModelConvertorService.java 2011-12-14 10:05:14 UTC (rev 518)
@@ -2,8 +2,23 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import fr.ifremer.mexico.model.*;
-import fr.inra.masc.model.*;
+import fr.ifremer.mexico.model.ExperienceDesign;
+import fr.ifremer.mexico.model.ExperienceDesignImpl;
+import fr.ifremer.mexico.model.Factor;
+import fr.ifremer.mexico.model.FactorImpl;
+import fr.ifremer.mexico.model.Feature;
+import fr.ifremer.mexico.model.FeatureImpl;
+import fr.ifremer.mexico.model.InputDesign;
+import fr.ifremer.mexico.model.InputDesignImpl;
+import fr.ifremer.mexico.model.Scenario;
+import fr.ifremer.mexico.model.ScenarioImpl;
+import fr.ifremer.mexico.model.ValueType;
+import fr.inra.masc.model.Criteria;
+import fr.inra.masc.model.EditableCriteria;
+import fr.inra.masc.model.MascModel;
+import fr.inra.masc.model.Option;
+import fr.inra.masc.model.OptionValue;
+import fr.inra.masc.model.ScaleValue;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Modified: masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java
===================================================================
--- masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java 2011-12-12 16:59:10 UTC (rev 517)
+++ masc/masc-api/src/main/java/fr/inra/masc/services/SaveModelService.java 2011-12-14 10:05:14 UTC (rev 518)
@@ -3,7 +3,13 @@
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
-import fr.inra.masc.model.*;
+import fr.inra.masc.model.ComputableCriteria;
+import fr.inra.masc.model.Criteria;
+import fr.inra.masc.model.Function;
+import fr.inra.masc.model.MascModel;
+import fr.inra.masc.model.Option;
+import fr.inra.masc.model.OptionValue;
+import fr.inra.masc.model.ScaleValue;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringEscapeUtils;
@@ -18,7 +24,25 @@
import java.util.LinkedList;
import java.util.Map;
-import static fr.inra.masc.model.MascXmlConstant.*;
+import static fr.inra.masc.model.MascXmlConstant.ATTRIBUTE;
+import static fr.inra.masc.model.MascXmlConstant.CRITERIA_DESCRIPTION;
+import static fr.inra.masc.model.MascXmlConstant.CRITERIA_NAME;
+import static fr.inra.masc.model.MascXmlConstant.DEXI;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_CONSIST;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_ENTERED;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_LOW;
+import static fr.inra.masc.model.MascXmlConstant.FUNCTION_WEIGHTS;
+import static fr.inra.masc.model.MascXmlConstant.LINE;
+import static fr.inra.masc.model.MascXmlConstant.MODEL_DESCRIPTION;
+import static fr.inra.masc.model.MascXmlConstant.MODEL_NAME;
+import static fr.inra.masc.model.MascXmlConstant.OPTION;
+import static fr.inra.masc.model.MascXmlConstant.SCALE;
+import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE;
+import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_DESCRIPTION;
+import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_GROUP;
+import static fr.inra.masc.model.MascXmlConstant.SCALE_VALUE_NAME;
+import static fr.inra.masc.model.MascXmlConstant.SETTINGS;
/**
* Service to save masc model
Modified: masc/masc-api/src/main/xmi/mexico.zargo
===================================================================
(Binary files differ)
Modified: masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java
===================================================================
--- masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java 2011-12-12 16:59:10 UTC (rev 517)
+++ masc/masc-api/src/test/java/fr/inra/masc/services/MexicoModelConvertorServiceTest.java 2011-12-14 10:05:14 UTC (rev 518)
@@ -3,7 +3,11 @@
import fr.ifremer.mexico.model.ExperienceDesign;
import fr.ifremer.mexico.model.InputDesign;
import fr.ifremer.mexico.model.Scenario;
-import fr.inra.masc.model.*;
+import fr.inra.masc.model.Criteria;
+import fr.inra.masc.model.EditableCriteria;
+import fr.inra.masc.model.MascModel;
+import fr.inra.masc.model.Option;
+import fr.inra.masc.model.OptionValue;
import org.junit.Test;
import java.io.File;
@@ -60,7 +64,7 @@
Scenario scenario = inputDesign.getScenarios(i++);
Collection<OptionValue> optionValues = option.getOptionValue();
- // count option with editable criteria
+ // count optionValues with editable criteria
int count = 0;
for (OptionValue optionValue : optionValues) {
Criteria criteria = optionValue.getCriteria();
1
0