/**
* <copyright>
* </copyright>
*
* $Id$
*/
package no.playtrd.v10.playtrd.util;
import java.util.List;
import java.util.Map;
import javax.measure.Measurable;
import no.playtrd.properties.GameCurrency;
import no.playtrd.v10.playtrd.*;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.DiagnosticChain;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.EObjectValidator;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.jscience.economics.money.Money;
import org.jscience.geography.coordinates.LatLong;
/**
* <!-- begin-user-doc -->
* The <b>Validator</b> for the model.
* <!-- end-user-doc -->
* @see no.playtrd.v10.playtrd.PlaytrdPackage
* @generated
*/
public class PlaytrdValidator extends EObjectValidator {
/**
* The cached model package
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public static final PlaytrdValidator INSTANCE = new PlaytrdValidator();
/**
* A constant for the {@link org.eclipse.emf.common.util.Diagnostic#getSource() source} of diagnostic {@link org.eclipse.emf.common.util.Diagnostic#getCode() codes} from this package.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see org.eclipse.emf.common.util.Diagnostic#getSource()
* @see org.eclipse.emf.common.util.Diagnostic#getCode()
* @generated
*/
public static final String DIAGNOSTIC_SOURCE = "no.playtrd.v10.playtrd";
/**
* A constant with a fixed name that can be used as the base value for additional hand written constants.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
private static final int GENERATED_DIAGNOSTIC_CODE_COUNT = 0;
/**
* A constant with a fixed name that can be used as the base value for additional hand written constants in a derived class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected static final int DIAGNOSTIC_CODE_COUNT = GENERATED_DIAGNOSTIC_CODE_COUNT;
/**
* Creates an instance of the switch.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public PlaytrdValidator() {
super();
}
/**
* Returns the package of this validator switch.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EPackage getEPackage() {
return PlaytrdPackage.eINSTANCE;
}
/**
* Calls <code>validateXXX</code> for the corresponding classifier of the model.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
@SuppressWarnings("unchecked")
protected boolean validate(int classifierID, Object value, DiagnosticChain diagnostics, Map<Object, Object> context) {
switch (classifierID) {
case PlaytrdPackage.OBJECT_POSITION:
return validateObjectPosition((ObjectPosition)value, diagnostics, context);
case PlaytrdPackage.PLAYER:
return validatePlayer((Player)value, diagnostics, context);
case PlaytrdPackage.PLAYTRD:
return validatePlaytrd((Playtrd)value, diagnostics, context);
case PlaytrdPackage.POI:
return validatePOI((POI)value, diagnostics, context);
case PlaytrdPackage.REGION:
return validateRegion((Region)value, diagnostics, context);
case PlaytrdPackage.GAME:
return validateGame((Game<?>)value, diagnostics, context);
case PlaytrdPackage.PLAYER_STATE:
return validatePlayerState((PlayerState)value, diagnostics, context);
case PlaytrdPackage.COMMUNITY:
return validateCommunity((Community)value, diagnostics, context);
case PlaytrdPackage.POSITION_SERVICE:
return validatePositionService((PositionService)value, diagnostics, context);
case PlaytrdPackage.POSITIONED:
return validatePositioned((Positioned)value, diagnostics, context);
case PlaytrdPackage.MESSAGE_SERVICE:
return validateMessageService((MessageService)value, diagnostics, context);
case PlaytrdPackage.PLAYER_MESSAGE:
return validatePlayerMessage((PlayerMessage)value, diagnostics, context);
case PlaytrdPackage.SERVICE:
return validateService((Service)value, diagnostics, context);
case PlaytrdPackage.SCRIPTED:
return validateScripted((Scripted)value, diagnostics, context);
case PlaytrdPackage.LOCATION_SERVICE:
return validateLocationService((LocationService)value, diagnostics, context);
case PlaytrdPackage.OBJECT_LOCATION:
return validateObjectLocation((ObjectLocation)value, diagnostics, context);
case PlaytrdPackage.ITEM:
return validateItem((Item)value, diagnostics, context);
case PlaytrdPackage.WALLET:
return validateWallet((Wallet)value, diagnostics, context);
case PlaytrdPackage.STORE:
return validateStore((Store)value, diagnostics, context);
case PlaytrdPackage.OWNER:
return validateOwner((Owner)value, diagnostics, context);
case PlaytrdPackage.TRADE:
return validateTrade((Trade)value, diagnostics, context);
case PlaytrdPackage.MONEY_VALUED:
return validateMoneyValued((MoneyValued)value, diagnostics, context);
case PlaytrdPackage.INVENTORY:
return validateInventory((Inventory)value, diagnostics, context);
case PlaytrdPackage.PROPERTIES:
return validateProperties((Properties)value, diagnostics, context);
case PlaytrdPackage.TAG_SERVICE:
return validateTagService((TagService)value, diagnostics, context);
case PlaytrdPackage.TAG_DATA:
return validateTagData((TagData)value, diagnostics, context);
case PlaytrdPackage.TAG_ENTRY:
return validateTagEntry((Map.Entry<?, ?>)value, diagnostics, context);
case PlaytrdPackage.COLOCATION_SERVICE:
return validateColocationService((ColocationService)value, diagnostics, context);
case PlaytrdPackage.OBJECT_COLOCATION:
return validateObjectColocation((ObjectColocation)value, diagnostics, context);
case PlaytrdPackage.GLOBE_POSITION:
return validateGlobePosition((LatLong)value, diagnostics, context);
case PlaytrdPackage.MONEY:
return validateMoney((Measurable<Money>)value, diagnostics, context);
case PlaytrdPackage.IEDITING_DOMAIN_PROVIDER:
return validateIEditingDomainProvider((IEditingDomainProvider)value, diagnostics, context);
default:
return true;
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateObjectPosition(ObjectPosition objectPosition, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(objectPosition, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePlayer(Player player, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(player, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePlaytrd(Playtrd playtrd, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(playtrd, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePOI(POI poi, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(poi, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateRegion(Region region, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(region, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateGame(Game<?> game, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(game, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePlayerState(PlayerState playerState, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(playerState, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateCommunity(Community community, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(community, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePositionService(PositionService positionService, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(positionService, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePositioned(Positioned positioned, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(positioned, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateMessageService(MessageService messageService, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(messageService, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validatePlayerMessage(PlayerMessage playerMessage, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(playerMessage, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateService(Service service, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(service, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateScripted(Scripted scripted, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(scripted, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateLocationService(LocationService locationService, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(locationService, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateObjectLocation(ObjectLocation objectLocation, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(objectLocation, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateItem(Item item, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(item, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateWallet(Wallet wallet, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(wallet, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateStore(Store store, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(store, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateOwner(Owner owner, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(owner, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTrade(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
boolean result = validate_EveryMultiplicityConforms(trade, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryDataValueConforms(trade, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryReferenceIsContained(trade, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryProxyResolves(trade, diagnostics, context);
if (result || diagnostics != null) result &= validate_UniqueID(trade, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryKeyUnique(trade, diagnostics, context);
if (result || diagnostics != null) result &= validate_EveryMapEntryUnique(trade, diagnostics, context);
if (result || diagnostics != null) result &= validateTrade_buyerIsNonNull(trade, diagnostics, context);
if (result || diagnostics != null) result &= validateTrade_sellerIsNonNull(trade, diagnostics, context);
if (result || diagnostics != null) result &= validateTrade_buyerWalletIsNonNull(trade, diagnostics, context);
if (result || diagnostics != null) result &= validateTrade_sellerOwnsSellerItems(trade, diagnostics, context);
if (result || diagnostics != null) result &= validateTrade_buyerOwnsBuyerItems(trade, diagnostics, context);
if (result || diagnostics != null) result &= validateTrade_moneyValueDefined(trade, diagnostics, context);
if (result || diagnostics != null) result &= validateTrade_walletHasMoneyValue(trade, diagnostics, context);
return result;
}
/**
* Validates the buyerIsNonNull constraint of '<em>Trade</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateTrade_buyerIsNonNull(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (trade.getBuyer() == null) {
if (diagnostics != null) {
diagnostics.add
(createDiagnostic
(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"_UI_GenericConstraint_diagnostic",
new Object[] { "buyerIsNonNull", getObjectLabel(trade, context) },
new Object[] { trade },
context));
}
return false;
}
return true;
}
/**
* Validates the sellerIsNonNull constraint of '<em>Trade</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateTrade_sellerIsNonNull(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (trade.getSeller() == null) {
if (diagnostics != null) {
diagnostics.add
(createDiagnostic
(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"_UI_GenericConstraint_diagnostic",
new Object[] { "sellerIsNonNull", getObjectLabel(trade, context) },
new Object[] { trade },
context));
}
return false;
}
return true;
}
/**
* Validates the buyerWalletIsNonNull constraint of '<em>Trade</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateTrade_buyerWalletIsNonNull(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (trade.getBuyerWallet() == null || (! isOwnedBy(trade.getBuyer(), trade.getBuyerWallet()))) {
if (diagnostics != null) {
diagnostics.add
(createDiagnostic
(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"_UI_GenericConstraint_diagnostic",
new Object[] { "buyerWalletIsNonNull", getObjectLabel(trade, context) },
new Object[] { trade },
context));
}
return false;
}
return true;
}
/**
* Validates the sellerOwnsSellerItems constraint of '<em>Trade</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateTrade_sellerOwnsSellerItems(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (! isOwnedBy(trade.getSeller(), trade.getSellerItems())) {
if (diagnostics != null) {
diagnostics.add
(createDiagnostic
(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"_UI_GenericConstraint_diagnostic",
new Object[] { "sellerOwnsSellerItems", getObjectLabel(trade, context) },
new Object[] { trade },
context));
}
return false;
}
return true;
}
/**
* Validates the buyerOwnsBuyerItems constraint of '<em>Trade</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateTrade_buyerOwnsBuyerItems(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
if (! isOwnedBy(trade.getBuyer(), trade.getBuyerItems())) {
if (diagnostics != null) {
diagnostics.add
(createDiagnostic
(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"_UI_GenericConstraint_diagnostic",
new Object[] { "buyerOwnsBuyerItems", getObjectLabel(trade, context) },
new Object[] { trade },
context));
}
return false;
}
return true;
}
/**
* Validates the moneyValueDefined constraint of '<em>Trade</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateTrade_moneyValueDefined(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
double tradeMoneyValue = getTradeMoneyValue(trade);
if (tradeMoneyValue == Double.NaN || tradeMoneyValue < 0.0) {
if (diagnostics != null) {
diagnostics.add
(createDiagnostic
(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"_UI_GenericConstraint_diagnostic",
new Object[] { "moneyValueDefined", getObjectLabel(trade, context) },
new Object[] { trade },
context));
}
return false;
}
return true;
}
/**
* Validates the walletHasMoneyValue constraint of '<em>Trade</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated NOT
*/
public boolean validateTrade_walletHasMoneyValue(Trade trade, DiagnosticChain diagnostics, Map<Object, Object> context) {
double walletMoneyValue = trade.getBuyerWallet().getMoneyValue().doubleValue(GameCurrency.GAME_CURRENCY);
double tradeMoneyValue = getTradeMoneyValue(trade);
if (walletMoneyValue < tradeMoneyValue) {
if (diagnostics != null) {
diagnostics.add
(createDiagnostic
(Diagnostic.ERROR,
DIAGNOSTIC_SOURCE,
0,
"_UI_GenericConstraint_diagnostic",
new Object[] { "walletHasMoneyValue", getObjectLabel(trade, context) },
new Object[] { trade },
context));
}
return false;
}
return true;
}
public static double getTradeMoneyValue(Trade trade) {
Measurable<Money> money = trade.getMoneyValue();
if (money != null) {
return money.doubleValue(GameCurrency.GAME_CURRENCY);
}
double total = 0.0;
for (Item item : trade.getSellerItems()) {
Measurable<Money> amount = item.getMoneyValue();
if (amount == null) {
return Double.NaN;
}
total += amount.doubleValue(GameCurrency.GAME_CURRENCY);
}
for (Item item : trade.getBuyerItems()) {
Measurable<Money> amount = item.getMoneyValue();
if (amount == null) {
return Double.NaN;
}
total -= amount.doubleValue(GameCurrency.GAME_CURRENCY);
}
return total;
}
public static boolean isOwnedBy(Owner owner, List<Item> items) {
for (Item item : items) {
if (! isOwnedBy(owner, item)) {
return false;
}
}
return true;
}
public static boolean isOwnedBy(Owner owner, Item item) {
for (EObject container = item.eContainer(); container != null; container = container.eContainer()) {
if (container == owner) {
return true;
} else if (! (container instanceof Inventory)) {
return false;
}
}
return false;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateMoneyValued(MoneyValued moneyValued, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(moneyValued, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateInventory(Inventory inventory, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(inventory, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateProperties(Properties properties, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(properties, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTagService(TagService tagService, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(tagService, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTagData(TagData tagData, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(tagData, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateTagEntry(Map.Entry<?, ?> tagEntry, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint((EObject)tagEntry, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateColocationService(ColocationService colocationService, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(colocationService, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateObjectColocation(ObjectColocation objectColocation, DiagnosticChain diagnostics, Map<Object, Object> context) {
return validate_EveryDefaultConstraint(objectColocation, diagnostics, context);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateGlobePosition(LatLong globePosition, DiagnosticChain diagnostics, Map<Object, Object> context) {
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateMoney(Measurable<Money> money, DiagnosticChain diagnostics, Map<Object, Object> context) {
return true;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public boolean validateIEditingDomainProvider(IEditingDomainProvider iEditingDomainProvider, DiagnosticChain diagnostics, Map<Object, Object> context) {
return true;
}
/**
* Returns the resource locator that will be used to fetch messages for this validator's diagnostics.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public ResourceLocator getResourceLocator() {
// TODO
// Specialize this to return a resource locator for messages specific to this validator.
// Ensure that you remove @generated or mark it @generated NOT
return super.getResourceLocator();
}
} //PlaytrdValidator