diff --git a/Mage.Client/src/main/java/mage/client/cards/Card.java b/Mage.Client/src/main/java/mage/client/cards/Card.java
index c81ed5f1b35..7028e4845d0 100644
--- a/Mage.Client/src/main/java/mage/client/cards/Card.java
+++ b/Mage.Client/src/main/java/mage/client/cards/Card.java
@@ -46,7 +46,7 @@ import mage.client.util.DefaultActionCallback;
import mage.client.util.ImageHelper;
import mage.client.util.gui.ArrowBuilder;
import mage.remote.Session;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.view.AbilityView;
import mage.view.CardView;
import mage.view.PermanentView;
diff --git a/Mage.Client/src/main/java/mage/client/cards/Permanent.java b/Mage.Client/src/main/java/mage/client/cards/Permanent.java
index 89aa3f3176e..921d5d1ab63 100644
--- a/Mage.Client/src/main/java/mage/client/cards/Permanent.java
+++ b/Mage.Client/src/main/java/mage/client/cards/Permanent.java
@@ -56,7 +56,7 @@ import mage.cards.CardDimensions;
import mage.cards.MagePermanent;
import mage.client.util.Config;
import mage.client.util.ImageHelper;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.view.CounterView;
import mage.view.PermanentView;
diff --git a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java
index e59d4c117a1..381faacae49 100644
--- a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java
+++ b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGenerator.java
@@ -13,7 +13,7 @@ import mage.client.cards.CardsStorage;
import mage.client.util.gui.ColorsChooser;
import mage.client.util.sets.ConstructedFormats;
import mage.interfaces.rate.RateCallback;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.utils.DeckBuilder;
import javax.swing.*;
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
index 94423ed4a61..018f1adffd4 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java
@@ -45,7 +45,7 @@ import mage.client.util.Listener;
import mage.components.CardInfoPane;
import mage.game.GameException;
import mage.remote.Session;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.view.CardView;
import mage.view.SimpleCardView;
import org.apache.log4j.Logger;
diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java
index 68b81cbda96..321398a2289 100644
--- a/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java
+++ b/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java
@@ -50,7 +50,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.ColorlessPredicate;
import mage.filter.predicate.other.CardTextPredicate;
import mage.filter.predicate.other.ExpansionSetPredicate;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.view.CardsView;
import javax.swing.*;
diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java
index 838f95f7e23..2c71cfbc97b 100644
--- a/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java
+++ b/Mage.Client/src/main/java/mage/client/dialog/NewTournamentDialog.java
@@ -44,7 +44,7 @@ import mage.game.draft.DraftOptions.TimingOption;
import mage.game.tournament.LimitedOptions;
import mage.game.tournament.TournamentOptions;
import mage.remote.Session;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.view.TableView;
import mage.view.TournamentTypeView;
import org.apache.log4j.Logger;
diff --git a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java
index 7246f8ae748..db337be4f45 100644
--- a/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java
+++ b/Mage.Client/src/main/java/mage/client/util/sets/ConstructedFormats.java
@@ -7,7 +7,7 @@ import java.util.GregorianCalendar;
import java.util.List;
import mage.cards.ExpansionSet;
import mage.cards.repository.CardRepository;
-import mage.sets.Sets;
+import mage.cards.Sets;
/**
* Utility class for constructed formats.
diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java
index 6ec14ee49e5..45def4ee99a 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Extended.java
@@ -33,7 +33,7 @@ import java.util.GregorianCalendar;
import mage.Constants.SetType;
import mage.cards.ExpansionSet;
import mage.cards.decks.Constructed;
-import mage.sets.Sets;
+import mage.cards.Sets;
/**
*
diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java
index deda018651f..e38979af4f5 100644
--- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java
+++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/Standard.java
@@ -33,7 +33,7 @@ import java.util.GregorianCalendar;
import mage.Constants.SetType;
import mage.cards.ExpansionSet;
import mage.cards.decks.Constructed;
-import mage.sets.Sets;
+import mage.cards.Sets;
/**
*
diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java
index 26b919dda2e..a0018bf1a37 100644
--- a/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java
+++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentFactory.java
@@ -36,7 +36,7 @@ import java.util.Map;
import mage.game.tournament.Tournament;
import mage.game.tournament.TournamentOptions;
import mage.game.tournament.TournamentType;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.view.TournamentTypeView;
import org.apache.log4j.Logger;
diff --git a/Mage.Sets/pom.xml b/Mage.Sets/pom.xml
index 6816f43b797..77560bad1d3 100644
--- a/Mage.Sets/pom.xml
+++ b/Mage.Sets/pom.xml
@@ -34,22 +34,6 @@
junit
4.8.2
-
-
- org.xerial
- sqlite-jdbc
- 3.7.2
-
-
- com.j256.ormlite
- ormlite-core
- 4.42
-
-
- com.j256.ormlite
- ormlite-jdbc
- 4.42
-
diff --git a/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java b/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java
index e2131542f9b..70ddc440b35 100644
--- a/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java
@@ -11,7 +11,7 @@ import mage.player.ai.ComputerPlayer;
import mage.remote.Connection;
import mage.remote.Session;
import mage.remote.SessionImpl;
-import mage.sets.Sets;
+import mage.cards.Sets;
import mage.view.GameTypeView;
import mage.view.TableView;
import org.apache.log4j.Logger;
diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java b/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java
index f0272dd1bb7..03e76eee302 100644
--- a/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java
+++ b/Mage.Tests/src/test/java/org/mage/test/serverside/PlayGameTest.java
@@ -10,7 +10,7 @@ import mage.game.GameOptions;
import mage.game.TwoPlayerDuel;
import mage.player.ai.ComputerPlayer;
import mage.players.Player;
-import mage.sets.Sets;
+import mage.cards.Sets;
import org.junit.Ignore;
import org.junit.Test;
import org.mage.test.serverside.base.MageTestBase;
diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/TestPlayRandomGame.java b/Mage.Tests/src/test/java/org/mage/test/serverside/TestPlayRandomGame.java
index 2b3723edbe7..8842ee1353d 100644
--- a/Mage.Tests/src/test/java/org/mage/test/serverside/TestPlayRandomGame.java
+++ b/Mage.Tests/src/test/java/org/mage/test/serverside/TestPlayRandomGame.java
@@ -10,7 +10,7 @@ import mage.game.GameOptions;
import mage.game.TwoPlayerDuel;
import mage.player.ai.ComputerPlayer;
import mage.players.Player;
-import mage.sets.Sets;
+import mage.cards.Sets;
import org.junit.Ignore;
import org.junit.Test;
import org.mage.test.serverside.base.MageTestBase;
diff --git a/Mage/pom.xml b/Mage/pom.xml
index 7c2a94ec626..7e216a5e081 100644
--- a/Mage/pom.xml
+++ b/Mage/pom.xml
@@ -21,6 +21,22 @@
1.2.14
jar
+
+
+ org.xerial
+ sqlite-jdbc
+ 3.7.2
+
+
+ com.j256.ormlite
+ ormlite-core
+ 4.42
+
+
+ com.j256.ormlite
+ ormlite-jdbc
+ 4.42
+
diff --git a/Mage.Sets/src/mage/sets/Sets.java b/Mage/src/mage/cards/Sets.java
similarity index 63%
rename from Mage.Sets/src/mage/sets/Sets.java
rename to Mage/src/mage/cards/Sets.java
index f1e309f83d8..20254e1119f 100644
--- a/Mage.Sets/src/mage/sets/Sets.java
+++ b/Mage/src/mage/cards/Sets.java
@@ -26,17 +26,15 @@
* or implied, of BetaSteward_at_googlemail.com.
*/
-package mage.sets;
+package mage.cards;
import mage.Constants.CardType;
import mage.Constants.ColoredManaSymbol;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.ExpansionSet;
import mage.cards.decks.DeckCardLists;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
+import mage.util.ClassScanner;
import org.apache.log4j.Logger;
import java.io.FileNotFoundException;
@@ -58,81 +56,14 @@ public class Sets extends HashMap {
}
private Sets() {
- this.addSet(AlaraReborn.getInstance());
- this.addSet(Alliances.getInstance());
- this.addSet(Antiquities.getInstance());
- this.addSet(Apocalypse.getInstance());
- this.addSet(ArabianNights.getInstance());
- this.addSet(AvacynRestored.getInstance());
- this.addSet(BetrayersOfKamigawa.getInstance());
- this.addSet(ChampionsOfKamigawa.getInstance());
- this.addSet(Coldsnap.getInstance());
- this.addSet(Conflux.getInstance());
- this.addSet(DarkAscension.getInstance());
- this.addSet(Darksteel.getInstance());
- this.addSet(Dissension.getInstance());
- this.addSet(EighthEdition.getInstance());
- this.addSet(ElspethvsTezzeret.getInstance());
- this.addSet(Eventide.getInstance());
- this.addSet(Exodus.getInstance());
- this.addSet(FifthDawn.getInstance());
- this.addSet(FifthEdition.getInstance());
- this.addSet(FallenEmpires.getInstance());
- this.addSet(FourthEdition.getInstance());
- this.addSet(FutureSight.getInstance());
- this.addSet(Guildpact.getInstance());
- this.addSet(Guru.getInstance());
- this.addSet(Homelands.getInstance());
- this.addSet(IceAge.getInstance());
- this.addSet(Innistrad.getInstance());
- this.addSet(Invasion.getInstance());
- this.addSet(Judgment.getInstance());
- this.addSet(Legends.getInstance());
- this.addSet(Legions.getInstance());
- this.addSet(Lorwyn.getInstance());
- this.addSet(Magic2010.getInstance());
- this.addSet(Magic2011.getInstance());
- this.addSet(Magic2012.getInstance());
- this.addSet(Magic2013.getInstance());
- this.addSet(MagicPlayerRewards.getInstance());
- this.addSet(MercadianMasques.getInstance());
- this.addSet(Mirage.getInstance());
- this.addSet(Mirrodin.getInstance());
- this.addSet(MirrodinBesieged.getInstance());
- this.addSet(Morningtide.getInstance());
- this.addSet(Nemesis.getInstance());
- this.addSet(NewPhyrexia.getInstance());
- this.addSet(NinthEdition.getInstance());
- this.addSet(Odyssey.getInstance());
- this.addSet(Onslaught.getInstance());
- this.addSet(PlanarChaos.getInstance());
- this.addSet(Planechase.getInstance());
- this.addSet(Planeshift.getInstance());
- this.addSet(Prophecy.getInstance());
- this.addSet(RavnicaCityOfGuilds.getInstance());
- this.addSet(ReturnToRavnica.getInstance());
- this.addSet(RiseOfTheEldrazi.getInstance());
- this.addSet(SaviorsOfKamigawa.getInstance());
- this.addSet(ScarsOfMirrodin.getInstance());
- this.addSet(Scourge.getInstance());
- this.addSet(SeventhEdition.getInstance());
- this.addSet(ShardsOfAlara.getInstance());
- this.addSet(Shadowmoor.getInstance());
- this.addSet(SixthEdition.getInstance());
- this.addSet(Stronghold.getInstance());
- this.addSet(Tenth.getInstance());
- this.addSet(Tempest.getInstance());
- this.addSet(TheDark.getInstance());
- this.addSet(TimeSpiral.getInstance());
- this.addSet(TimeSpiralTimeshifted.getInstance());
- this.addSet(Torment.getInstance());
- this.addSet(UrzasSaga.getInstance());
- this.addSet(UrzasLegacy.getInstance());
- this.addSet(UrzasDestiny.getInstance());
- this.addSet(Visions.getInstance());
- this.addSet(Weatherlight.getInstance());
- this.addSet(Worldwake.getInstance());
- this.addSet(Zendikar.getInstance());
+ ArrayList packages = new ArrayList();
+ packages.add("mage.sets");
+ for (Class c : ClassScanner.findClasses(packages, ExpansionSet.class)) {
+ try {
+ addSet((ExpansionSet) c.getMethod("getInstance").invoke(null));
+ } catch (Exception ex) {
+ }
+ }
}
private void addSet(ExpansionSet set) {
@@ -190,8 +121,9 @@ public class Sets extends HashMap {
}
public static ExpansionSet findSet(String code) {
- if (fINSTANCE.containsKey(code))
+ if (fINSTANCE.containsKey(code)) {
return fINSTANCE.get(code);
+ }
return null;
}
@@ -200,10 +132,12 @@ public class Sets extends HashMap {
Map deckCards = new HashMap();
Map sideboard = new HashMap();
try {
- if (deck.getName() != null && deck.getName().length() > 0)
+ if (deck.getName() != null && deck.getName().length() > 0) {
out.println("NAME:" + deck.getName());
- if (deck.getAuthor() != null && deck.getAuthor().length() > 0)
+ }
+ if (deck.getAuthor() != null && deck.getAuthor().length() > 0) {
out.println("AUTHOR:" + deck.getAuthor());
+ }
for (String cardClass: deck.getCards()) {
if (deckCards.containsKey(cardClass)) {
deckCards.put(cardClass, deckCards.get(cardClass) + 1);
diff --git a/Mage.Sets/src/mage/cards/decks/importer/DckDeckImporter.java b/Mage/src/mage/cards/decks/importer/DckDeckImporter.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/decks/importer/DckDeckImporter.java
rename to Mage/src/mage/cards/decks/importer/DckDeckImporter.java
diff --git a/Mage.Sets/src/mage/cards/decks/importer/DecDeckImporter.java b/Mage/src/mage/cards/decks/importer/DecDeckImporter.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/decks/importer/DecDeckImporter.java
rename to Mage/src/mage/cards/decks/importer/DecDeckImporter.java
diff --git a/Mage.Sets/src/mage/cards/decks/importer/DeckImporter.java b/Mage/src/mage/cards/decks/importer/DeckImporter.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/decks/importer/DeckImporter.java
rename to Mage/src/mage/cards/decks/importer/DeckImporter.java
diff --git a/Mage.Sets/src/mage/cards/decks/importer/DeckImporterUtil.java b/Mage/src/mage/cards/decks/importer/DeckImporterUtil.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/decks/importer/DeckImporterUtil.java
rename to Mage/src/mage/cards/decks/importer/DeckImporterUtil.java
diff --git a/Mage.Sets/src/mage/cards/decks/importer/MWSDeckImporter.java b/Mage/src/mage/cards/decks/importer/MWSDeckImporter.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/decks/importer/MWSDeckImporter.java
rename to Mage/src/mage/cards/decks/importer/MWSDeckImporter.java
diff --git a/Mage.Sets/src/mage/cards/decks/importer/TxtDeckImporter.java b/Mage/src/mage/cards/decks/importer/TxtDeckImporter.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/decks/importer/TxtDeckImporter.java
rename to Mage/src/mage/cards/decks/importer/TxtDeckImporter.java
diff --git a/Mage.Sets/src/mage/cards/repository/CardCriteria.java b/Mage/src/mage/cards/repository/CardCriteria.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/repository/CardCriteria.java
rename to Mage/src/mage/cards/repository/CardCriteria.java
diff --git a/Mage.Sets/src/mage/cards/repository/CardInfo.java b/Mage/src/mage/cards/repository/CardInfo.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/repository/CardInfo.java
rename to Mage/src/mage/cards/repository/CardInfo.java
diff --git a/Mage.Sets/src/mage/cards/repository/CardRepository.java b/Mage/src/mage/cards/repository/CardRepository.java
similarity index 100%
rename from Mage.Sets/src/mage/cards/repository/CardRepository.java
rename to Mage/src/mage/cards/repository/CardRepository.java
diff --git a/Mage/src/mage/cards/repository/CardScanner.java b/Mage/src/mage/cards/repository/CardScanner.java
new file mode 100644
index 00000000000..e8b5472d390
--- /dev/null
+++ b/Mage/src/mage/cards/repository/CardScanner.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of BetaSteward_at_googlemail.com.
+ */
+package mage.cards.repository;
+
+import java.util.ArrayList;
+import java.util.List;
+import mage.cards.Card;
+import mage.cards.CardImpl;
+import mage.cards.ExpansionSet;
+import mage.cards.Sets;
+import mage.util.ClassScanner;
+
+/**
+ *
+ * @author North
+ */
+public class CardScanner {
+
+ private static boolean scanned = false;
+
+ public static void scan() {
+ if (scanned) {
+ return;
+ }
+ scanned = true;
+
+ List cardsToAdd = new ArrayList();
+ List packages = new ArrayList();
+ for (ExpansionSet set : Sets.getInstance().values()) {
+ packages.add(set.getPackageName());
+ }
+
+ for (Class c : ClassScanner.findClasses(packages, CardImpl.class)) {
+ if (!CardRepository.instance.cardExists(c.getCanonicalName())) {
+ Card card = CardImpl.createCard(c);
+ if (card != null && !card.isNightCard()) {
+ cardsToAdd.add(new CardInfo(card));
+ }
+ }
+ }
+ if (!cardsToAdd.isEmpty()) {
+ CardRepository.instance.addCards(cardsToAdd);
+ }
+ }
+}
diff --git a/Mage.Sets/src/mage/cards/repository/CardScanner.java b/Mage/src/mage/util/ClassScanner.java
similarity index 73%
rename from Mage.Sets/src/mage/cards/repository/CardScanner.java
rename to Mage/src/mage/util/ClassScanner.java
index a8ba126ead9..434258be2ed 100644
--- a/Mage.Sets/src/mage/cards/repository/CardScanner.java
+++ b/Mage/src/mage/util/ClassScanner.java
@@ -25,7 +25,7 @@
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
-package mage.cards.repository;
+package mage.util;
import java.io.File;
import java.io.FileInputStream;
@@ -39,45 +39,14 @@ import java.util.List;
import java.util.TreeSet;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
-import mage.cards.Card;
-import mage.cards.CardImpl;
-import mage.cards.ExpansionSet;
-import mage.sets.Sets;
/**
*
* @author North
*/
-public class CardScanner {
+public class ClassScanner {
- private static boolean scanned = false;
-
- public static void scan() {
- if (scanned) {
- return;
- }
- scanned = true;
-
- List cardsToAdd = new ArrayList();
- List packages = new ArrayList();
- for (ExpansionSet set : Sets.getInstance().values()) {
- packages.add(set.getPackageName());
- }
-
- for (Class c : getCards(packages)) {
- if (!CardRepository.instance.cardExists(c.getCanonicalName())) {
- Card card = CardImpl.createCard(c);
- if (card != null && !card.isNightCard()) {
- cardsToAdd.add(new CardInfo(card));
- }
- }
- }
- if (!cardsToAdd.isEmpty()) {
- CardRepository.instance.addCards(cardsToAdd);
- }
- }
-
- private static List getCards(List packages) {
+ public static List findClasses(List packages, Class> type) {
List cards = new ArrayList();
try {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
@@ -102,19 +71,19 @@ public class CardScanner {
}
for (String filePath : dirs.keySet()) {
- cards.addAll(findCards(new File(filePath), dirs.get(filePath)));
+ cards.addAll(findClasses(new File(filePath), dirs.get(filePath), type));
}
for (String filePath : jars) {
File file = new File(URLDecoder.decode(filePath, "UTF-8"));
- cards.addAll(findCardsInJar(file, packages));
+ cards.addAll(findClassesInJar(file, packages, type));
}
} catch (IOException ex) {
}
return cards;
}
- private static List findCards(File directory, String packageName) {
+ private static List findClasses(File directory, String packageName, Class> type) {
List cards = new ArrayList();
if (!directory.exists()) {
return cards;
@@ -124,7 +93,7 @@ public class CardScanner {
if (file.getName().endsWith(".class")) {
try {
Class> clazz = Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6));
- if (CardImpl.class.isAssignableFrom(clazz)) {
+ if (type.isAssignableFrom(clazz)) {
cards.add(clazz);
}
} catch (ClassNotFoundException ex) {
@@ -134,7 +103,7 @@ public class CardScanner {
return cards;
}
- private static List findCardsInJar(File file, List packages) {
+ private static List findClassesInJar(File file, List packages, Class> type) {
List cards = new ArrayList();
if (!file.exists()) {
return cards;
@@ -149,12 +118,13 @@ public class CardScanner {
}
if (jarEntry.getName().endsWith(".class")) {
String className = jarEntry.getName().replace('/', '.').replace(".class", "");
- String packageName = className.substring(0, className.lastIndexOf('.'));
+ int packageNameEnd = className.lastIndexOf('.');
+ String packageName = packageNameEnd != -1 ? className.substring(0, packageNameEnd) : "";
if (packages.contains(packageName)) {
Class> clazz;
try {
clazz = Class.forName(className);
- if (CardImpl.class.isAssignableFrom(clazz)) {
+ if (type.isAssignableFrom(clazz)) {
cards.add(clazz);
}
} catch (ClassNotFoundException ex) {