diff options
author | Eduardo Pedroni <e.pedroni91@gmail.com> | 2016-08-21 01:14:38 +0200 |
---|---|---|
committer | Eduardo Pedroni <e.pedroni91@gmail.com> | 2016-08-21 01:14:38 +0200 |
commit | 3a25d47f187fe7499d2d481d9a0a3411a92bfa11 (patch) | |
tree | 40ee4efedd0bcbd29aa0ec8e5cb3c8e11af9e26e | |
parent | 7f80ab416a708e5c31116b9af7295af673d116d7 (diff) |
Switched from ant to gradle, had to refactor some of the tests because of the new build structure, a bit ugly but should pass
26 files changed, 417 insertions, 151 deletions
@@ -3,19 +3,7 @@ <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="res"/> <classpathentry kind="src" path="test"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="lib" path="lib/jackson-annotations-2.5.0.jar"/> - <classpathentry kind="lib" path="lib/jackson-core-2.5.3.jar"> - <attributes> - <attribute name="javadoc_location" value="http://fasterxml.github.com/jackson-core/javadoc/2.5/"/> - </attributes> - </classpathentry> - <classpathentry kind="lib" path="lib/jackson-databind-2.5.3.jar"> - <attributes> - <attribute name="javadoc_location" value="http://fasterxml.github.com/jackson-databind/javadoc/2.5/"/> - </attributes> - </classpathentry> - <classpathentry kind="lib" path="lib/junit/hamcrest-core-1.3.jar" sourcepath="lib/junit/hamcrest-core-1.3-sources.jar"/> - <classpathentry kind="lib" path="lib/junit/junit-4.12.jar" sourcepath="lib/junit/junit-4.12-sources.jar"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/> + <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> <classpathentry kind="output" path="bin"/> </classpath> @@ -1,7 +1,19 @@ __pycache__/ bin/ -dist/ test/spike/ -build/main/ -build/test/ src/Tests.java + +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>Cardbase</name> - <comment></comment> + <name>NewCardbase</name> + <comment>Project Cardbase created by Buildship.</comment> <projects> </projects> <buildSpec> @@ -10,8 +10,14 @@ <arguments> </arguments> </buildCommand> + <buildCommand> + <name>org.eclipse.buildship.core.gradleprojectbuilder</name> + <arguments> + </arguments> + </buildCommand> </buildSpec> <natures> + <nature>org.eclipse.buildship.core.gradleprojectnature</nature> <nature>org.eclipse.jdt.core.javanature</nature> </natures> </projectDescription> diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs new file mode 100644 index 0000000..b994b1f --- /dev/null +++ b/.settings/org.eclipse.buildship.core.prefs @@ -0,0 +1,11 @@ +build.commands=org.eclipse.jdt.core.javabuilder +connection.arguments= +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.java.home=null +connection.jvm.arguments= +connection.project.dir= +containers=org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/ +derived.resources=.gradle,build +eclipse.preferences.version=1 +natures=org.eclipse.jdt.core.javanature +project.path=\: diff --git a/.travis.yml b/.travis.yml index 191f650..b179f30 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,3 @@ language: java jdk: - - oraclejdk8 - -script: ant -buildfile build/build.xml test + - openjdk8 @@ -61,6 +61,4 @@ Use the "version" command to see the executable's version. ## Building -The Ant build script can be found under /build. The default target "deploy" compiles and packs all necessary binaries into a single executable jar, /dist/cardbase.jar. - -Linux users can execute "shebang" to create a concatenation of the shebang defined in /build/header (by default #!/usr/bin/java -jar) and the deployed jar, saved as the executable /dist/cardbase. +Cardbase now uses [gradle](https://gradle.org/) for building and dependency management. As recommended, use the provided `gradlew` script for best results. diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..acc2489 --- /dev/null +++ b/build.gradle @@ -0,0 +1,52 @@ +/* + * This build file was auto generated by running the Gradle 'init' task + * by 'eddy' at '20/08/16 10:27' with Gradle 3.0 + * + * This generated file contains a sample Java project to get you started. + * For more details take a look at the Java Quickstart chapter in the Gradle + * user guide available at https://docs.gradle.org/3.0/userguide/tutorial_java_projects.html + */ + +// Apply the java plugin to add support for Java +apply plugin: 'java' + +// In this section you declare where to find the dependencies of your project +repositories { + // Use 'jcenter' for resolving your dependencies. + // You can declare any Maven/Ivy/file repository here. + jcenter() +} + +sourceSets { + main { + java { + srcDirs = ['src'] + } + resources { + srcDirs = ['res'] + } + } + + test { + java { + srcDirs = ['test'] + } + resources { + srcDirs = ['test'] + } + } +} + +// In this section you declare the dependencies for your production and test code +dependencies { + // Declare the dependency for your favourite test framework you want to use in your tests. + // TestNG is also supported by the Gradle Test task. Just change the + // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add + // 'test.useTestNG()' to your build script. + testCompile 'junit:junit:4.12' + + // Need jackson for the JSON + compile 'com.fasterxml.jackson.core:jackson-core:2.8.1' + compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.1' + compile 'com.fasterxml.jackson.core:jackson-databind:2.8.1' +} diff --git a/build/build.xml b/build/build.xml deleted file mode 100644 index 918039b..0000000 --- a/build/build.xml +++ /dev/null @@ -1,113 +0,0 @@ -<?xml version="1.0"?> -<project name="cardbase" default="test" basedir=".."> - - <property name="main.build.dir" value="build/main" /> - <property name="main.src.dir" value="src" /> - <property name="main-class" value="eu.equalparts.cardbase.cli.CardbaseCLI" /> - - <property name="test.build.dir" value="build/test" /> - <property name="test.src.dir" value="test" /> - - <property name="build.dir" location="build" /> - <property name="dist.dir" location="dist" /> - <property name="lib.dir" value="lib" /> - <property name="test.lib.dir" value="lib/junit" /> - - <property name="res.dir" value="res" /> - - <property name="jar.name" value="cardbase" /> - - <path id="classpath.base" > - <fileset dir="${basedir}/"> - <include name="${res.dir}/*" /> - - <include name="${lib.dir}/*.jar" /> - <exclude name="${lib.dir}/*sources.jar"/> - <exclude name="${lib.dir}/*javadoc.jar"/> - </fileset> - </path> - - <path id="classpath.test"> - <fileset dir="${basedir}/"> - <include name="${lib.dir}/junit/*.jar" /> - <exclude name="${lib.dir}/junit/*sources.jar"/> - <exclude name="${lib.dir}/junit/*javadoc.jar"/> - </fileset> - <pathelement location="${test.build.dir}"/> - <pathelement location="${main.build.dir}"/> - <path refid="classpath.base" /> - </path> - - <target name="test" depends="run, clean" /> - - <target name="compile" depends="clean"> - <mkdir dir="${main.build.dir}"/> - <javac srcdir="${main.src.dir}" destdir="${main.build.dir}" includeantruntime="false"> - <classpath refid="classpath.base"/> - </javac> - <copy todir="${main.build.dir}"> - <fileset dir="${res.dir}" excludes=""/> - </copy> - </target> - - <target name="build" depends="compile"> - <mkdir dir="${test.build.dir}"/> - <javac srcdir="${test.src.dir}" destdir="${test.build.dir}" includeantruntime="false"> - <classpath refid="classpath.test"/> - </javac> - <copy todir="${test.build.dir}"> - <fileset dir="${test.src.dir}" excludes="**.java"/> - </copy> - <echo message="Build done" /> - </target> - - <!-- Test and build all files --> - <!-- To run this: use "ant" (default) or "ant run" --> - <target name="run" depends="build"> - <junit printsummary="on" haltonfailure="yes"> - <classpath> - <path refid="classpath.test" /> - <pathelement location="${test.build.dir}"/> - </classpath> - <formatter type="brief" usefile="false" /> - <batchtest> - <fileset dir="${test.src.dir}" includes="**/*Test*.java" /> - </batchtest> - </junit> - </target> - - <!-- delete all class files --> - <!-- To run this: use "ant clean" --> - <target name="clean"> - <delete dir="${main.build.dir}" /> - <delete dir="${test.build.dir}" /> - <echo message="clean done" /> - </target> - - <!-- Create the jar and declare the ext libraries in manifest.mf file --> - <target name="jar" depends="compile" > - <mkdir dir="${dist.dir}" /> - - <jar jarfile="${dist.dir}/${jar.name}.jar" basedir="${main.build.dir}"> - <zipgroupfileset dir="${lib.dir}" includes="*.jar" excludes="*sources.jar, *javadoc.jar" /> - <manifest> - <attribute name="Main-Class" value="${main-class}" /> - <attribute name="Class-Path" value="${classpath.base.name}" /> - </manifest> - </jar> - </target> - - <!-- Produce a standalone, runnable jar --> - <target name="deploy" depends="compile, jar" /> - - <!-- Concatenate the jar to a pre-set header and chmod 755 it --> - <target name="shebang" depends="deploy" > - <concat destfile="${dist.dir}/${jar.name}" binary="yes"> - <fileset dir="${build.dir}" includes="header"/> - <fileset dir="${dist.dir}" includes="${jar.name}.jar"/> - </concat> - - <chmod file="${dist.dir}/${jar.name}" perm="755"/> - </target> - -</project>
\ No newline at end of file diff --git a/build/header b/build/header deleted file mode 100644 index fdeaa61..0000000 --- a/build/header +++ /dev/null @@ -1 +0,0 @@ -#!/usr/bin/java -jar diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar Binary files differnew file mode 100644 index 0000000..deedc7f --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.jar diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..d5b2af9 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sat Aug 20 10:27:27 CEST 2016 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-bin.zip @@ -0,0 +1,169 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/lib/jackson-annotations-2.5.0.jar b/lib/jackson-annotations-2.5.0.jar Binary files differdeleted file mode 100644 index 6252131..0000000 --- a/lib/jackson-annotations-2.5.0.jar +++ /dev/null diff --git a/lib/jackson-core-2.5.3.jar b/lib/jackson-core-2.5.3.jar Binary files differdeleted file mode 100644 index f3ae1ae..0000000 --- a/lib/jackson-core-2.5.3.jar +++ /dev/null diff --git a/lib/jackson-databind-2.5.3.jar b/lib/jackson-databind-2.5.3.jar Binary files differdeleted file mode 100644 index e217187..0000000 --- a/lib/jackson-databind-2.5.3.jar +++ /dev/null diff --git a/lib/junit/hamcrest-core-1.3-sources.jar b/lib/junit/hamcrest-core-1.3-sources.jar Binary files differdeleted file mode 100644 index c3c110b..0000000 --- a/lib/junit/hamcrest-core-1.3-sources.jar +++ /dev/null diff --git a/lib/junit/hamcrest-core-1.3.jar b/lib/junit/hamcrest-core-1.3.jar Binary files differdeleted file mode 100644 index 9d5fe16..0000000 --- a/lib/junit/hamcrest-core-1.3.jar +++ /dev/null diff --git a/lib/junit/junit-4.12-sources.jar b/lib/junit/junit-4.12-sources.jar Binary files differdeleted file mode 100644 index 884f92f..0000000 --- a/lib/junit/junit-4.12-sources.jar +++ /dev/null diff --git a/lib/junit/junit-4.12.jar b/lib/junit/junit-4.12.jar Binary files differdeleted file mode 100644 index 3a7fc26..0000000 --- a/lib/junit/junit-4.12.jar +++ /dev/null diff --git a/res/fallbackSetList.json b/res/fallbackSetList.json index bb5f4d6..85b75c8 100644 --- a/res/fallbackSetList.json +++ b/res/fallbackSetList.json @@ -1 +1 @@ -[{"name":"Limited Edition Alpha","code":"LEA","releaseDate":"1993-08-05"},{"name":"Limited Edition Beta","code":"LEB","releaseDate":"1993-10-01"},{"name":"Arabian Nights","code":"ARN","releaseDate":"1993-12-01"},{"name":"Unlimited Edition","code":"2ED","releaseDate":"1993-12-01"},{"name":"Dragon Con","code":"pDRC","releaseDate":"1994-01-01"},{"name":"Antiquities","code":"ATQ","releaseDate":"1994-03-01"},{"name":"Revised Edition","code":"3ED","releaseDate":"1994-04-01"},{"name":"Legends","code":"LEG","releaseDate":"1994-06-01"},{"name":"The Dark","code":"DRK","releaseDate":"1994-08-01"},{"name":"Media Inserts","code":"pMEI","releaseDate":"1995-01-01"},{"name":"Fallen Empires","code":"FEM","releaseDate":"1994-11-01"},{"name":"Legend Membership","code":"pLGM","releaseDate":"1995-01-01"},{"name":"Fourth Edition","code":"4ED","releaseDate":"1995-04-01"},{"name":"Ice Age","code":"ICE","releaseDate":"1995-06-01"},{"name":"Chronicles","code":"CHR","releaseDate":"1995-07-01"},{"name":"Homelands","code":"HML","releaseDate":"1995-10-01"},{"name":"Alliances","code":"ALL","releaseDate":"1996-06-10"},{"name":"Rivals Quick Start Set","code":"RQS","releaseDate":"1996-07-01"},{"name":"Arena League","code":"pARL","releaseDate":"1996-08-02"},{"name":"Celebration","code":"pCEL","releaseDate":"1996-08-14"},{"name":"Mirage","code":"MIR","releaseDate":"1996-10-08"},{"name":"Multiverse Gift Box","code":"MGB","releaseDate":"1996-11-01"},{"name":"Introductory Two-Player Set","code":"ITP","releaseDate":"1996-12-31"},{"name":"Visions","code":"VIS","releaseDate":"1997-02-03"},{"name":"Fifth Edition","code":"5ED","releaseDate":"1997-03-24"},{"name":"Portal Demo Game","code":"pPOD","releaseDate":"1997-05-01"},{"name":"Portal","code":"POR","releaseDate":"1997-05-01"},{"name":"Vanguard","code":"VAN","releaseDate":"1997-05-01"},{"name":"Weatherlight","code":"WTH","releaseDate":"1997-06-09"},{"name":"Prerelease Events","code":"pPRE","releaseDate":"1997-10-04"},{"name":"Tempest","code":"TMP","releaseDate":"1997-10-14"},{"name":"Stronghold","code":"STH","releaseDate":"1998-03-02"},{"name":"Portal Second Age","code":"PO2","releaseDate":"1998-06-01"},{"name":"Judge Gift Program","code":"pJGP","releaseDate":"1998-06-01"},{"name":"Exodus","code":"EXO","releaseDate":"1998-06-15"},{"name":"Unglued","code":"UGL","releaseDate":"1998-08-11"},{"name":"Asia Pacific Land Program","code":"pALP","releaseDate":"1998-09-01"},{"name":"Urza's Saga","code":"USG","releaseDate":"1998-10-12"},{"name":"Anthologies","code":"ATH","releaseDate":"1998-11-01"},{"name":"Urza's Legacy","code":"ULG","releaseDate":"1999-02-15"},{"name":"Classic Sixth Edition","code":"6ED","releaseDate":"1999-04-21"},{"name":"Portal Three Kingdoms","code":"PTK","releaseDate":"1999-05-01"},{"name":"Urza's Destiny","code":"UDS","releaseDate":"1999-06-07"},{"name":"Starter 1999","code":"S99","releaseDate":"1999-07-01"},{"name":"Guru","code":"pGRU","releaseDate":"1999-07-12"},{"name":"Worlds","code":"pWOR","releaseDate":"1999-08-04"},{"name":"Wizards of the Coast Online Store","code":"pWOS","releaseDate":"1999-09-04"},{"name":"Mercadian Masques","code":"MMQ","releaseDate":"1999-10-04"},{"name":"Battle Royale Box Set","code":"BRB","releaseDate":"1999-11-12"},{"name":"Super Series","code":"pSUS","releaseDate":"1999-12-01"},{"name":"Friday Night Magic","code":"pFNM","releaseDate":"2000-02-01"},{"name":"European Land Program","code":"pELP","releaseDate":"2000-02-05"},{"name":"Nemesis","code":"NMS","releaseDate":"2000-02-14"},{"name":"Starter 2000","code":"S00","releaseDate":"2000-04-01"},{"name":"Prophecy","code":"PCY","releaseDate":"2000-06-05"},{"name":"Beatdown Box Set","code":"BTD","releaseDate":"2000-10-01"},{"name":"Invasion","code":"INV","releaseDate":"2000-10-02"},{"name":"Planeshift","code":"PLS","releaseDate":"2001-02-05"},{"name":"Seventh Edition","code":"7ED","releaseDate":"2001-04-11"},{"name":"Magic Player Rewards","code":"pMPR","releaseDate":"2001-05-01"},{"name":"Apocalypse","code":"APC","releaseDate":"2001-06-04"},{"name":"Odyssey","code":"ODY","releaseDate":"2001-10-01"},{"name":"Deckmasters","code":"DKM","releaseDate":"2001-12-01"},{"name":"Torment","code":"TOR","releaseDate":"2002-02-04"},{"name":"Judgment","code":"JUD","releaseDate":"2002-05-27"},{"name":"Onslaught","code":"ONS","releaseDate":"2002-10-07"},{"name":"Legions","code":"LGN","releaseDate":"2003-02-03"},{"name":"Scourge","code":"SCG","releaseDate":"2003-05-26"},{"name":"Release Events","code":"pREL","releaseDate":"2003-07-26"},{"name":"Eighth Edition","code":"8ED","releaseDate":"2003-07-28"},{"name":"Mirrodin","code":"MRD","releaseDate":"2003-10-02"},{"name":"Darksteel","code":"DST","releaseDate":"2004-02-06"},{"name":"Fifth Dawn","code":"5DN","releaseDate":"2004-06-04"},{"name":"Champions of Kamigawa","code":"CHK","releaseDate":"2004-10-01"},{"name":"Unhinged","code":"UNH","releaseDate":"2004-11-20"},{"name":"Betrayers of Kamigawa","code":"BOK","releaseDate":"2005-02-04"},{"name":"Saviors of Kamigawa","code":"SOK","releaseDate":"2005-06-03"},{"name":"Ninth Edition","code":"9ED","releaseDate":"2005-07-29"},{"name":"Ravnica: City of Guilds","code":"RAV","releaseDate":"2005-10-07"},{"name":"Two-Headed Giant Tournament","code":"p2HG","releaseDate":"2005-12-09"},{"name":"WPN and Gateway","code":"pWPN","releaseDate":"2006-01-01"},{"name":"Guildpact","code":"GPT","releaseDate":"2006-02-03"},{"name":"Champs and States","code":"pCMP","releaseDate":"2006-03-18"},{"name":"Dissension","code":"DIS","releaseDate":"2006-05-05"},{"name":"Coldsnap","code":"CSP","releaseDate":"2006-07-21"},{"name":"Coldsnap Theme Decks","code":"CST","releaseDate":"2006-07-21"},{"name":"Time Spiral","code":"TSP","releaseDate":"2006-10-06"},{"name":"Time Spiral \"Timeshifted\"","code":"TSB","releaseDate":"2006-10-06"},{"name":"Happy Holidays","code":"pHHO","releaseDate":"2006-12-31"},{"name":"Planar Chaos","code":"PLC","releaseDate":"2007-02-02"},{"name":"Pro Tour","code":"pPRO","releaseDate":"2007-02-09"},{"name":"Grand Prix","code":"pGPX","releaseDate":"2007-02-24"},{"name":"Future Sight","code":"FUT","releaseDate":"2007-05-04"},{"name":"Tenth Edition","code":"10E","releaseDate":"2007-07-13"},{"name":"Magic Game Day","code":"pMGD","releaseDate":"2007-07-14"},{"name":"Masters Edition","code":"MED","releaseDate":"2007-09-10"},{"name":"Lorwyn","code":"LRW","releaseDate":"2007-10-12"},{"name":"Duel Decks: Elves vs. Goblins","code":"EVG","releaseDate":"2007-11-16"},{"name":"Launch Parties","code":"pLPA","releaseDate":"2008-02-01"},{"name":"Morningtide","code":"MOR","releaseDate":"2008-02-01"},{"name":"15th Anniversary","code":"p15A","releaseDate":"2008-04-01"},{"name":"Shadowmoor","code":"SHM","releaseDate":"2008-05-02"},{"name":"Summer of Magic","code":"pSUM","releaseDate":"2007-07-21"},{"name":"Eventide","code":"EVE","releaseDate":"2008-07-25"},{"name":"From the Vault: Dragons","code":"DRB","releaseDate":"2008-08-29"},{"name":"Masters Edition II","code":"ME2","releaseDate":"2008-09-22"},{"name":"Shards of Alara","code":"ALA","releaseDate":"2008-10-03"},{"name":"Duel Decks: Jace vs. Chandra","code":"DD2","releaseDate":"2008-11-07"},{"name":"Conflux","code":"CON","releaseDate":"2009-02-06"},{"name":"Duel Decks: Divine vs. Demonic","code":"DDC","releaseDate":"2009-04-10"},{"name":"Alara Reborn","code":"ARB","releaseDate":"2009-04-30"},{"name":"Magic 2010","code":"M10","releaseDate":"2009-07-17"},{"name":"From the Vault: Exiled","code":"V09","releaseDate":"2009-08-28"},{"name":"Planechase","code":"HOP","releaseDate":"2009-09-04"},{"name":"Masters Edition III","code":"ME3","releaseDate":"2009-09-07"},{"name":"Zendikar","code":"ZEN","releaseDate":"2009-10-02"},{"name":"Duel Decks: Garruk vs. Liliana","code":"DDD","releaseDate":"2009-10-30"},{"name":"Premium Deck Series: Slivers","code":"H09","releaseDate":"2009-11-20"},{"name":"Worldwake","code":"WWK","releaseDate":"2010-02-05"},{"name":"Duel Decks: Phyrexia vs. the Coalition","code":"DDE","releaseDate":"2010-03-19"},{"name":"Rise of the Eldrazi","code":"ROE","releaseDate":"2010-04-23"},{"name":"Duels of the Planeswalkers","code":"DPA","releaseDate":"2010-06-04"},{"name":"Archenemy","code":"ARC","releaseDate":"2010-06-18"},{"name":"Magic 2011","code":"M11","releaseDate":"2010-07-16"},{"name":"From the Vault: Relics","code":"V10","releaseDate":"2010-08-27"},{"name":"Duel Decks: Elspeth vs. Tezzeret","code":"DDF","releaseDate":"2010-09-03"},{"name":"Scars of Mirrodin","code":"SOM","releaseDate":"2010-10-01"},{"name":"Premium Deck Series: Fire and Lightning","code":"PD2","releaseDate":"2010-11-19"},{"name":"Masters Edition IV","code":"ME4","releaseDate":"2011-01-10"},{"name":"Mirrodin Besieged","code":"MBS","releaseDate":"2011-02-04"},{"name":"Duel Decks: Knights vs. Dragons","code":"DDG","releaseDate":"2011-04-01"},{"name":"New Phyrexia","code":"NPH","releaseDate":"2011-05-13"},{"name":"Magic: The Gathering-Commander","code":"CMD","releaseDate":"2011-06-17"},{"name":"Magic 2012","code":"M12","releaseDate":"2011-07-15"},{"name":"From the Vault: Legends","code":"V11","releaseDate":"2011-08-26"},{"name":"Duel Decks: Ajani vs. Nicol Bolas","code":"DDH","releaseDate":"2011-09-02"},{"name":"Innistrad","code":"ISD","releaseDate":"2011-09-30"},{"name":"Premium Deck Series: Graveborn","code":"PD3","releaseDate":"2011-11-18"},{"name":"Dark Ascension","code":"DKA","releaseDate":"2012-02-03"},{"name":"Duel Decks: Venser vs. Koth","code":"DDI","releaseDate":"2012-03-30"},{"name":"Avacyn Restored","code":"AVR","releaseDate":"2012-05-04"},{"name":"Planechase 2012 Edition","code":"PC2","releaseDate":"2012-06-01"},{"name":"Magic 2013","code":"M13","releaseDate":"2012-07-13"},{"name":"From the Vault: Realms","code":"V12","releaseDate":"2012-08-31"},{"name":"Duel Decks: Izzet vs. Golgari","code":"DDJ","releaseDate":"2012-09-07"},{"name":"Return to Ravnica","code":"RTR","releaseDate":"2012-10-05"},{"name":"Commander's Arsenal","code":"CM1","releaseDate":"2012-11-02"},{"name":"Gatecrash","code":"GTC","releaseDate":"2013-02-01"},{"name":"Duel Decks: Sorin vs. Tibalt","code":"DDK","releaseDate":"2013-03-15"},{"name":"World Magic Cup Qualifiers","code":"pWCQ","releaseDate":"2013-04-06"},{"name":"Dragon's Maze","code":"DGM","releaseDate":"2013-05-03"},{"name":"Modern Masters","code":"MMA","releaseDate":"2013-06-07"},{"name":"Magic 2014 Core Set","code":"M14","releaseDate":"2013-07-19"},{"name":"From the Vault: Twenty","code":"V13","releaseDate":"2013-08-23"},{"name":"Duel Decks: Heroes vs. Monsters","code":"DDL","releaseDate":"2013-09-06"},{"name":"Theros","code":"THS","releaseDate":"2013-09-27"},{"name":"Commander 2013 Edition","code":"C13","releaseDate":"2013-11-01"},{"name":"Born of the Gods","code":"BNG","releaseDate":"2014-02-07"},{"name":"Duel Decks: Jace vs. Vraska","code":"DDM","releaseDate":"2014-03-14"},{"name":"Journey into Nyx","code":"JOU","releaseDate":"2014-05-02"},{"name":"Modern Event Deck 2014","code":"MD1","releaseDate":"2014-05-30"},{"name":"Magic: The Gathering—Conspiracy","code":"CNS","releaseDate":"2014-06-06"},{"name":"Vintage Masters","code":"VMA","releaseDate":"2014-06-16"},{"name":"Magic 2015 Core Set","code":"M15","releaseDate":"2014-07-18"},{"name":"From the Vault: Annihilation (2014)","code":"V14","releaseDate":"2014-08-22"},{"name":"Duel Decks: Speed vs. Cunning","code":"DDN","releaseDate":"2014-09-05"},{"name":"Khans of Tarkir","code":"KTK","releaseDate":"2014-09-26"},{"name":"Commander 2014","code":"C14","releaseDate":"2014-11-07"},{"name":"Duel Decks Anthology, Divine vs. Demonic","code":"DD3_DVD","releaseDate":"2014-12-05"},{"name":"Duel Decks Anthology, Elves vs. Goblins","code":"DD3_EVG","releaseDate":"2014-12-05"},{"name":"Duel Decks Anthology, Garruk vs. Liliana","code":"DD3_GVL","releaseDate":"2014-12-05"},{"name":"Duel Decks Anthology, Jace vs. Chandra","code":"DD3_JVC","releaseDate":"2014-12-05"},{"name":"Ugin's Fate promos","code":"FRF_UGIN","releaseDate":"2015-01-17"},{"name":"Fate Reforged","code":"FRF","releaseDate":"2015-01-23"},{"name":"Duel Decks: Elspeth vs. Kiora","code":"DDO","releaseDate":"2015-02-27"},{"name":"Dragons of Tarkir","code":"DTK","releaseDate":"2015-03-27"},{"name":"Tempest Remastered","code":"TPR","releaseDate":"2015-05-06"},{"name":"Modern Masters 2015 Edition","code":"MM2","releaseDate":"2015-05-22"}]
\ No newline at end of file +[{"name":"Limited Edition Alpha","code":"LEA","releaseDate":"1993-08-05"},{"name":"Limited Edition Beta","code":"LEB","releaseDate":"1993-10-01"},{"name":"Arabian Nights","code":"ARN","releaseDate":"1993-12-01"},{"name":"Unlimited Edition","code":"2ED","releaseDate":"1993-12-01"},{"name":"Collector's Edition","code":"CED","releaseDate":"1993-12-01"},{"name":"International Collector's Edition","code":"CEI","releaseDate":"1993-12-01"},{"name":"Dragon Con","code":"pDRC","releaseDate":"1994-01-01"},{"name":"Antiquities","code":"ATQ","releaseDate":"1994-03-01"},{"name":"Revised Edition","code":"3ED","releaseDate":"1994-04-01"},{"name":"Legends","code":"LEG","releaseDate":"1994-06-01"},{"name":"The Dark","code":"DRK","releaseDate":"1994-08-01"},{"name":"Media Inserts","code":"pMEI","releaseDate":"1995-01-01"},{"name":"Fallen Empires","code":"FEM","releaseDate":"1994-11-01"},{"name":"Legend Membership","code":"pLGM","releaseDate":"1995-01-01"},{"name":"Fourth Edition","code":"4ED","releaseDate":"1995-04-01"},{"name":"Ice Age","code":"ICE","releaseDate":"1995-06-01"},{"name":"Chronicles","code":"CHR","releaseDate":"1995-07-01"},{"name":"Homelands","code":"HML","releaseDate":"1995-10-01"},{"name":"Alliances","code":"ALL","releaseDate":"1996-06-10"},{"name":"Rivals Quick Start Set","code":"RQS","releaseDate":"1996-07-01"},{"name":"Arena League","code":"pARL","releaseDate":"1996-08-02"},{"name":"Celebration","code":"pCEL","releaseDate":"1996-08-14"},{"name":"Mirage","code":"MIR","releaseDate":"1996-10-08"},{"name":"Multiverse Gift Box","code":"MGB","releaseDate":"1996-11-01"},{"name":"Introductory Two-Player Set","code":"ITP","releaseDate":"1996-12-31"},{"name":"Visions","code":"VIS","releaseDate":"1997-02-03"},{"name":"Fifth Edition","code":"5ED","releaseDate":"1997-03-24"},{"name":"Portal Demo Game","code":"pPOD","releaseDate":"1997-05-01"},{"name":"Portal","code":"POR","releaseDate":"1997-05-01"},{"name":"Vanguard","code":"VAN","releaseDate":"1997-05-01"},{"name":"Weatherlight","code":"WTH","releaseDate":"1997-06-09"},{"name":"Prerelease Events","code":"pPRE","releaseDate":"1997-10-04"},{"name":"Tempest","code":"TMP","releaseDate":"1997-10-14"},{"name":"Stronghold","code":"STH","releaseDate":"1998-03-02"},{"name":"Portal Second Age","code":"PO2","releaseDate":"1998-06-01"},{"name":"Judge Gift Program","code":"pJGP","releaseDate":"1998-06-01"},{"name":"Exodus","code":"EXO","releaseDate":"1998-06-15"},{"name":"Unglued","code":"UGL","releaseDate":"1998-08-11"},{"name":"Asia Pacific Land Program","code":"pALP","releaseDate":"1998-09-01"},{"name":"Urza's Saga","code":"USG","releaseDate":"1998-10-12"},{"name":"Anthologies","code":"ATH","releaseDate":"1998-11-01"},{"name":"Urza's Legacy","code":"ULG","releaseDate":"1999-02-15"},{"name":"Classic Sixth Edition","code":"6ED","releaseDate":"1999-04-21"},{"name":"Portal Three Kingdoms","code":"PTK","releaseDate":"1999-05-01"},{"name":"Urza's Destiny","code":"UDS","releaseDate":"1999-06-07"},{"name":"Starter 1999","code":"S99","releaseDate":"1999-07-01"},{"name":"Guru","code":"pGRU","releaseDate":"1999-07-12"},{"name":"Worlds","code":"pWOR","releaseDate":"1999-08-04"},{"name":"Wizards of the Coast Online Store","code":"pWOS","releaseDate":"1999-09-04"},{"name":"Mercadian Masques","code":"MMQ","releaseDate":"1999-10-04"},{"name":"Battle Royale Box Set","code":"BRB","releaseDate":"1999-11-12"},{"name":"Super Series","code":"pSUS","releaseDate":"1999-12-01"},{"name":"Friday Night Magic","code":"pFNM","releaseDate":"2000-02-01"},{"name":"European Land Program","code":"pELP","releaseDate":"2000-02-05"},{"name":"Nemesis","code":"NMS","releaseDate":"2000-02-14"},{"name":"Starter 2000","code":"S00","releaseDate":"2000-04-01"},{"name":"Prophecy","code":"PCY","releaseDate":"2000-06-05"},{"name":"Beatdown Box Set","code":"BTD","releaseDate":"2000-10-01"},{"name":"Invasion","code":"INV","releaseDate":"2000-10-02"},{"name":"Planeshift","code":"PLS","releaseDate":"2001-02-05"},{"name":"Seventh Edition","code":"7ED","releaseDate":"2001-04-11"},{"name":"Magic Player Rewards","code":"pMPR","releaseDate":"2001-05-01"},{"name":"Apocalypse","code":"APC","releaseDate":"2001-06-04"},{"name":"Odyssey","code":"ODY","releaseDate":"2001-10-01"},{"name":"Deckmasters","code":"DKM","releaseDate":"2001-12-01"},{"name":"Torment","code":"TOR","releaseDate":"2002-02-04"},{"name":"Judgment","code":"JUD","releaseDate":"2002-05-27"},{"name":"Onslaught","code":"ONS","releaseDate":"2002-10-07"},{"name":"Legions","code":"LGN","releaseDate":"2003-02-03"},{"name":"Scourge","code":"SCG","releaseDate":"2003-05-26"},{"name":"Release Events","code":"pREL","releaseDate":"2003-07-26"},{"name":"Eighth Edition","code":"8ED","releaseDate":"2003-07-28"},{"name":"Mirrodin","code":"MRD","releaseDate":"2003-10-02"},{"name":"Darksteel","code":"DST","releaseDate":"2004-02-06"},{"name":"Fifth Dawn","code":"5DN","releaseDate":"2004-06-04"},{"name":"Champions of Kamigawa","code":"CHK","releaseDate":"2004-10-01"},{"name":"Unhinged","code":"UNH","releaseDate":"2004-11-20"},{"name":"Betrayers of Kamigawa","code":"BOK","releaseDate":"2005-02-04"},{"name":"Saviors of Kamigawa","code":"SOK","releaseDate":"2005-06-03"},{"name":"Ninth Edition","code":"9ED","releaseDate":"2005-07-29"},{"name":"Ravnica: City of Guilds","code":"RAV","releaseDate":"2005-10-07"},{"name":"Two-Headed Giant Tournament","code":"p2HG","releaseDate":"2005-12-09"},{"name":"Gateway","code":"pGTW","releaseDate":"2006-01-01"},{"name":"Guildpact","code":"GPT","releaseDate":"2006-02-03"},{"name":"Champs and States","code":"pCMP","releaseDate":"2006-03-18"},{"name":"Dissension","code":"DIS","releaseDate":"2006-05-05"},{"name":"Coldsnap","code":"CSP","releaseDate":"2006-07-21"},{"name":"Coldsnap Theme Decks","code":"CST","releaseDate":"2006-07-21"},{"name":"Time Spiral","code":"TSP","releaseDate":"2006-10-06"},{"name":"Time Spiral \"Timeshifted\"","code":"TSB","releaseDate":"2006-10-06"},{"name":"Happy Holidays","code":"pHHO","releaseDate":"2006-12-31"},{"name":"Planar Chaos","code":"PLC","releaseDate":"2007-02-02"},{"name":"Pro Tour","code":"pPRO","releaseDate":"2007-02-09"},{"name":"Grand Prix","code":"pGPX","releaseDate":"2007-02-24"},{"name":"Future Sight","code":"FUT","releaseDate":"2007-05-04"},{"name":"Tenth Edition","code":"10E","releaseDate":"2007-07-13"},{"name":"Magic Game Day","code":"pMGD","releaseDate":"2007-07-14"},{"name":"Masters Edition","code":"MED","releaseDate":"2007-09-10"},{"name":"Lorwyn","code":"LRW","releaseDate":"2007-10-12"},{"name":"Duel Decks: Elves vs. Goblins","code":"EVG","releaseDate":"2007-11-16"},{"name":"Launch Parties","code":"pLPA","releaseDate":"2008-02-01"},{"name":"Morningtide","code":"MOR","releaseDate":"2008-02-01"},{"name":"15th Anniversary","code":"p15A","releaseDate":"2008-04-01"},{"name":"Shadowmoor","code":"SHM","releaseDate":"2008-05-02"},{"name":"Summer of Magic","code":"pSUM","releaseDate":"2007-07-21"},{"name":"Eventide","code":"EVE","releaseDate":"2008-07-25"},{"name":"From the Vault: Dragons","code":"DRB","releaseDate":"2008-08-29"},{"name":"Masters Edition II","code":"ME2","releaseDate":"2008-09-22"},{"name":"Wizards Play Network","code":"pWPN","releaseDate":"2008-10-01"},{"name":"Shards of Alara","code":"ALA","releaseDate":"2008-10-03"},{"name":"Duel Decks: Jace vs. Chandra","code":"DD2","releaseDate":"2008-11-07"},{"name":"Conflux","code":"CON","releaseDate":"2009-02-06"},{"name":"Duel Decks: Divine vs. Demonic","code":"DDC","releaseDate":"2009-04-10"},{"name":"Alara Reborn","code":"ARB","releaseDate":"2009-04-30"},{"name":"Magic 2010","code":"M10","releaseDate":"2009-07-17"},{"name":"From the Vault: Exiled","code":"V09","releaseDate":"2009-08-28"},{"name":"Planechase","code":"HOP","releaseDate":"2009-09-04"},{"name":"Masters Edition III","code":"ME3","releaseDate":"2009-09-07"},{"name":"Zendikar","code":"ZEN","releaseDate":"2009-10-02"},{"name":"Duel Decks: Garruk vs. Liliana","code":"DDD","releaseDate":"2009-10-30"},{"name":"Premium Deck Series: Slivers","code":"H09","releaseDate":"2009-11-20"},{"name":"Worldwake","code":"WWK","releaseDate":"2010-02-05"},{"name":"Duel Decks: Phyrexia vs. the Coalition","code":"DDE","releaseDate":"2010-03-19"},{"name":"Rise of the Eldrazi","code":"ROE","releaseDate":"2010-04-23"},{"name":"Duels of the Planeswalkers","code":"DPA","releaseDate":"2010-06-04"},{"name":"Archenemy","code":"ARC","releaseDate":"2010-06-18"},{"name":"Magic 2011","code":"M11","releaseDate":"2010-07-16"},{"name":"From the Vault: Relics","code":"V10","releaseDate":"2010-08-27"},{"name":"Duel Decks: Elspeth vs. Tezzeret","code":"DDF","releaseDate":"2010-09-03"},{"name":"Scars of Mirrodin","code":"SOM","releaseDate":"2010-10-01"},{"name":"Premium Deck Series: Fire and Lightning","code":"PD2","releaseDate":"2010-11-19"},{"name":"Masters Edition IV","code":"ME4","releaseDate":"2011-01-10"},{"name":"Mirrodin Besieged","code":"MBS","releaseDate":"2011-02-04"},{"name":"Duel Decks: Knights vs. Dragons","code":"DDG","releaseDate":"2011-04-01"},{"name":"New Phyrexia","code":"NPH","releaseDate":"2011-05-13"},{"name":"Magic: The Gathering-Commander","code":"CMD","releaseDate":"2011-06-17"},{"name":"Magic 2012","code":"M12","releaseDate":"2011-07-15"},{"name":"From the Vault: Legends","code":"V11","releaseDate":"2011-08-26"},{"name":"Duel Decks: Ajani vs. Nicol Bolas","code":"DDH","releaseDate":"2011-09-02"},{"name":"Innistrad","code":"ISD","releaseDate":"2011-09-30"},{"name":"Premium Deck Series: Graveborn","code":"PD3","releaseDate":"2011-11-18"},{"name":"Dark Ascension","code":"DKA","releaseDate":"2012-02-03"},{"name":"Duel Decks: Venser vs. Koth","code":"DDI","releaseDate":"2012-03-30"},{"name":"Avacyn Restored","code":"AVR","releaseDate":"2012-05-04"},{"name":"Planechase 2012 Edition","code":"PC2","releaseDate":"2012-06-01"},{"name":"Magic 2013","code":"M13","releaseDate":"2012-07-13"},{"name":"From the Vault: Realms","code":"V12","releaseDate":"2012-08-31"},{"name":"Duel Decks: Izzet vs. Golgari","code":"DDJ","releaseDate":"2012-09-07"},{"name":"Return to Ravnica","code":"RTR","releaseDate":"2012-10-05"},{"name":"Commander's Arsenal","code":"CM1","releaseDate":"2012-11-02"},{"name":"Gatecrash","code":"GTC","releaseDate":"2013-02-01"},{"name":"Duel Decks: Sorin vs. Tibalt","code":"DDK","releaseDate":"2013-03-15"},{"name":"World Magic Cup Qualifiers","code":"pWCQ","releaseDate":"2013-04-06"},{"name":"Dragon's Maze","code":"DGM","releaseDate":"2013-05-03"},{"name":"Modern Masters","code":"MMA","releaseDate":"2013-06-07"},{"name":"Magic 2014 Core Set","code":"M14","releaseDate":"2013-07-19"},{"name":"From the Vault: Twenty","code":"V13","releaseDate":"2013-08-23"},{"name":"Duel Decks: Heroes vs. Monsters","code":"DDL","releaseDate":"2013-09-06"},{"name":"Theros","code":"THS","releaseDate":"2013-09-27"},{"name":"Commander 2013 Edition","code":"C13","releaseDate":"2013-11-01"},{"name":"Born of the Gods","code":"BNG","releaseDate":"2014-02-07"},{"name":"Duel Decks: Jace vs. Vraska","code":"DDM","releaseDate":"2014-03-14"},{"name":"Journey into Nyx","code":"JOU","releaseDate":"2014-05-02"},{"name":"Modern Event Deck 2014","code":"MD1","releaseDate":"2014-05-30"},{"name":"Magic: The Gathering—Conspiracy","code":"CNS","releaseDate":"2014-06-06"},{"name":"Vintage Masters","code":"VMA","releaseDate":"2014-06-16"},{"name":"Magic 2015 Core Set","code":"M15","releaseDate":"2014-07-18"},{"name":"Clash Pack","code":"CPK","releaseDate":"2014-07-18"},{"name":"From the Vault: Annihilation (2014)","code":"V14","releaseDate":"2014-08-22"},{"name":"Duel Decks: Speed vs. Cunning","code":"DDN","releaseDate":"2014-09-05"},{"name":"Khans of Tarkir","code":"KTK","releaseDate":"2014-09-26"},{"name":"Commander 2014","code":"C14","releaseDate":"2014-11-07"},{"name":"Duel Decks Anthology, Divine vs. Demonic","code":"DD3_DVD","releaseDate":"2014-12-05"},{"name":"Duel Decks Anthology, Elves vs. Goblins","code":"DD3_EVG","releaseDate":"2014-12-05"},{"name":"Duel Decks Anthology, Garruk vs. Liliana","code":"DD3_GVL","releaseDate":"2014-12-05"},{"name":"Duel Decks Anthology, Jace vs. Chandra","code":"DD3_JVC","releaseDate":"2014-12-05"},{"name":"Ugin's Fate promos","code":"FRF_UGIN","releaseDate":"2015-01-17"},{"name":"Fate Reforged","code":"FRF","releaseDate":"2015-01-23"},{"name":"Duel Decks: Elspeth vs. Kiora","code":"DDO","releaseDate":"2015-02-27"},{"name":"Dragons of Tarkir","code":"DTK","releaseDate":"2015-03-27"},{"name":"Tempest Remastered","code":"TPR","releaseDate":"2015-05-06"},{"name":"Modern Masters 2015 Edition","code":"MM2","releaseDate":"2015-05-22"},{"name":"Magic Origins","code":"ORI","releaseDate":"2015-07-17"},{"name":"From the Vault: Angels","code":"V15","releaseDate":"2015-08-21"},{"name":"Duel Decks: Zendikar vs. Eldrazi","code":"DDP","releaseDate":"2015-08-28"},{"name":"Battle for Zendikar","code":"BFZ","releaseDate":"2015-10-02"},{"name":"Zendikar Expeditions","code":"EXP","releaseDate":"2015-10-02"},{"name":"Commander 2015","code":"C15","releaseDate":"2015-11-13"},{"name":"Oath of the Gatewatch","code":"OGW","releaseDate":"2016-01-22"},{"name":"Duel Decks: Blessed vs. Cursed","code":"DDQ","releaseDate":"2016-02-26"},{"name":"Welcome Deck 2016","code":"W16","releaseDate":"2016-04-08"},{"name":"Shadows over Innistrad","code":"SOI","releaseDate":"2016-04-08"},{"name":"Eternal Masters","code":"EMA","releaseDate":"2016-06-10"},{"name":"Eldritch Moon","code":"EMN","releaseDate":"2016-07-22"}]
\ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..70d7a3d --- /dev/null +++ b/settings.gradle @@ -0,0 +1,19 @@ +/* + * This settings file was auto generated by the Gradle buildInit task + * by 'eddy' at '20/08/16 10:27' with Gradle 3.0 + * + * The settings file is used to specify which projects to include in your build. + * In a single project build this file can be empty or even removed. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user guide at https://docs.gradle.org/3.0/userguide/multi_project_builds.html + */ + +/* +// To declare projects as part of a multi-project build use the 'include' method +include 'shared' +include 'api' +include 'services:webservice' +*/ + +rootProject.name = 'NewCardbase' diff --git a/src/eu/equalparts/cardbase/card/CardSetInformation.java b/src/eu/equalparts/cardbase/card/CardSetInformation.java index a01c18d..d57015c 100644 --- a/src/eu/equalparts/cardbase/card/CardSetInformation.java +++ b/src/eu/equalparts/cardbase/card/CardSetInformation.java @@ -1,10 +1,12 @@ package eu.equalparts.cardbase.card; +import com.fasterxml.jackson.annotation.JsonProperty; + public class CardSetInformation { - private String name; - private String code; - private String releaseDate; + @JsonProperty private String name; + @JsonProperty private String code; + @JsonProperty private String releaseDate; /** * @return the set's name. diff --git a/src/eu/equalparts/cardbase/json/FullCardSetDeserializer.java b/src/eu/equalparts/cardbase/json/FullCardSetDeserializer.java index 73034a0..c493df4 100644 --- a/src/eu/equalparts/cardbase/json/FullCardSetDeserializer.java +++ b/src/eu/equalparts/cardbase/json/FullCardSetDeserializer.java @@ -45,7 +45,7 @@ public class FullCardSetDeserializer extends StdDeserializer<FullCardSet> { if (jsonTree.hasNonNull("name")) { fcs.name = jsonTree.get("name").asText(); } else { - throw new JsonMappingException("Field \"name\" not found."); + throw new JsonMappingException(jp, "Field \"name\" not found."); } String setCode; @@ -53,13 +53,13 @@ public class FullCardSetDeserializer extends StdDeserializer<FullCardSet> { setCode = jsonTree.get("code").asText(); fcs.code = setCode; } else { - throw new JsonMappingException("Field \"code\" not found."); + throw new JsonMappingException(jp, "Field \"code\" not found."); } if (jsonTree.hasNonNull("releaseDate")) { fcs.releaseDate = jsonTree.get("releaseDate").asText(); } else { - throw new JsonMappingException("Field \"releaseDate\" not found."); + throw new JsonMappingException(jp, "Field \"releaseDate\" not found."); } if (jsonTree.hasNonNull("cards")) { @@ -74,7 +74,7 @@ public class FullCardSetDeserializer extends StdDeserializer<FullCardSet> { } fcs.cards = cardMap; } else { - throw new JsonMappingException("Field \"cards\" not found."); + throw new JsonMappingException(jp, "Field \"cards\" not found."); } /* diff --git a/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java b/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java index 87755db..64a1030 100644 --- a/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java +++ b/test/eu/equalparts/cardbase/cli/CardbaseCLITest.java @@ -5,9 +5,12 @@ import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; +import java.net.URI; +import java.net.URISyntaxException; import java.util.Scanner; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -33,7 +36,7 @@ public class CardbaseCLITest { * The test remote URL to "query" from, this is actually the same directory * as the test class. Test files need to be placed accordingly. */ - private final String TEST_REMOTE = getClass().getResource("").toString(); + private static String TEST_REMOTE; @Rule public ExpectedException exception = ExpectedException.none(); @@ -41,12 +44,17 @@ public class CardbaseCLITest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); + @BeforeClass + public static void setUpBeforeClass() throws Exception { + TEST_REMOTE = getResourceLocation("SetList.json"); + } + @Before public void setUp() throws Exception { uut = new CardbaseCLI(TEST_REMOTE); testOutput.reset(); } - + /*********************************************************************************** * Start up tests, happy path ***********************************************************************************/ @@ -1567,6 +1575,17 @@ public class CardbaseCLITest { * Utility methods for dealing with files ***********************************************************************************/ /** + * For deriving the location of local resources for this class from the location + * of a specific resource. + * + * @return the URI of the resource directory as a string. + */ + private static String getResourceLocation(String resourceName) throws URISyntaxException { + URI location = new URI(CardbaseCLITest.class.getResource(resourceName).getPath()); + return "file:" + location.resolve(".").toString(); + } + + /** * Returns the contents of a resource file by reading it with a {@code Scanner}. The file is * loaded using {@code getClass().getResourceAsStream()}, so make sure to address it relative * to the classloader of this class. diff --git a/test/eu/equalparts/cardbase/cli/expectedFallbackList b/test/eu/equalparts/cardbase/cli/expectedFallbackList index 93a0d03..00896d7 100644 --- a/test/eu/equalparts/cardbase/cli/expectedFallbackList +++ b/test/eu/equalparts/cardbase/cli/expectedFallbackList @@ -3,6 +3,8 @@ LEA : Limited Edition Alpha LEB : Limited Edition Beta ARN : Arabian Nights 2ED : Unlimited Edition +CED : Collector's Edition +CEI : International Collector's Edition pDRC : Dragon Con ATQ : Antiquities 3ED : Revised Edition @@ -79,7 +81,7 @@ SOK : Saviors of Kamigawa 9ED : Ninth Edition RAV : Ravnica: City of Guilds p2HG : Two-Headed Giant Tournament -pWPN : WPN and Gateway +pGTW : Gateway GPT : Guildpact pCMP : Champs and States DIS : Dissension @@ -105,6 +107,7 @@ pSUM : Summer of Magic EVE : Eventide DRB : From the Vault: Dragons ME2 : Masters Edition II +pWPN : Wizards Play Network ALA : Shards of Alara DD2 : Duel Decks: Jace vs. Chandra CON : Conflux @@ -163,6 +166,7 @@ MD1 : Modern Event Deck 2014 CNS : Magic: The Gathering—Conspiracy VMA : Vintage Masters M15 : Magic 2015 Core Set +CPK : Clash Pack V14 : From the Vault: Annihilation (2014) DDN : Duel Decks: Speed vs. Cunning KTK : Khans of Tarkir @@ -176,4 +180,16 @@ FRF : Fate Reforged DDO : Duel Decks: Elspeth vs. Kiora DTK : Dragons of Tarkir TPR : Tempest Remastered -MM2 : Modern Masters 2015 Edition
\ No newline at end of file +MM2 : Modern Masters 2015 Edition +ORI : Magic Origins +V15 : From the Vault: Angels +DDP : Duel Decks: Zendikar vs. Eldrazi +BFZ : Battle for Zendikar +EXP : Zendikar Expeditions +C15 : Commander 2015 +OGW : Oath of the Gatewatch +DDQ : Duel Decks: Blessed vs. Cursed +W16 : Welcome Deck 2016 +SOI : Shadows over Innistrad +EMA : Eternal Masters +EMN : Eldritch Moon
\ No newline at end of file |