You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@isis.apache.org by "Dan Haywood (JIRA)" <ji...@apache.org> on 2016/11/02 10:17:58 UTC
[jira] [Updated] (ISIS-1512) MetaModelValidator should detect
domain services that have collections, and fail-fast.
[ https://issues.apache.org/jira/browse/ISIS-1512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dan Haywood updated ISIS-1512:
------------------------------
Summary: MetaModelValidator should detect domain services that have collections, and fail-fast. (was: MetaModelValidator should detect domain objects that have collections, and fail-fast.)
> MetaModelValidator should detect domain services that have collections, and fail-fast.
> --------------------------------------------------------------------------------------
>
> Key: ISIS-1512
> URL: https://issues.apache.org/jira/browse/ISIS-1512
> Project: Isis
> Issue Type: Improvement
> Components: Core
> Affects Versions: 1.13.0
> Reporter: Dan Haywood
> Priority: Minor
> Fix For: 1.14.0
>
>
> this issue arose because attempting to download the metamodel.csv threw an exception when it encountered an invalid class (specifically, EstatioFakeDataService):
> {code}
> @DomainService(nature = NatureOfService.DOMAIN)
> public class EstatioFakeDataService {
> static Random random;
> static {
> random = new Random(System.currentTimeMillis());
> }
> Faker2 faker2;
> @PostConstruct
> public void init() {
> faker2 = new Faker2(random);
> }
> @Inject
> private ClockService clockService;
> @Inject
> private DomainObjectContainer container;
> private RandomService randomService;
> private final Values values;
> private final Collections collections;
> private final Dates dates;
> private final Periods periods;
> public EstatioFakeDataService() {
> randomService = new RandomService(random);
> this.values = new Values();
> this.collections = new Collections();
> this.dates = new Dates();
> this.periods = new Periods();
> }
> @Programmatic
> public PhoneNumber phoneNumber() {
> return faker2.phoneNumber();
> }
> @Programmatic
> public Options options() {
> return faker2.options();
> }
> @Programmatic
> public Internet internet() {
> return faker2.internet();
> }
> @Programmatic
> public Code code() {
> return faker2.code();
> }
> @Programmatic
> public Business business() {
> return faker2.business();
> }
> @Programmatic
> public Address address() {
> return faker2.address();
> }
> @Programmatic
> public Name name() {
> return faker2.name();
> }
> @Programmatic
> public Lorem lorem() {
> return faker2.lorem();
> }
> public Values values() {
> return values;
> }
> public Collections collections() {
> return collections;
> }
> public Dates dates() {
> return dates;
> }
> public Periods periods() {
> return periods;
> }
> public class Values {
> public String code(final int numChars) {
> final StringBuilder buf = new StringBuilder();
> final char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
> for (int i = 0; i < numChars; i++) {
> char c = collections().anElement(chars);
> buf.append(c);
> }
> return buf.toString();
> }
> public int anInt(final int upTo) {
> return randomService.nextInt(upTo);
> }
> public int anInt(final int min, final int max) {
> return min + randomService.nextInt(max-min);
> }
> public int aDouble(final int upTo) {
> return randomService.nextInt(upTo);
> }
> public boolean aCoinFlip() {
> return randomService.nextDouble() < 0.5;
> }
> public boolean aDiceRollOf6() {
> return anInt(6) == 5;
> }
> }
> public class Collections {
> public <E extends Enum<E>> E anEnum(final Class<E> enumType) {
> final E[] enumConstants = enumType.getEnumConstants();
> return enumConstants[values().anInt(enumConstants.length)];
> }
> public <T> T aBounded(final Class<T> cls) {
> final List<T> list = container.allInstances(cls);
> return anElement(list);
> }
> public <T> T anElement(final List<T> list) {
> final int randomIdx = values().anInt(list.size());
> return list.get(randomIdx);
> }
> public char anElement(final char[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public byte anElement(final byte[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public short anElement(final short[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public int anElement(final int[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public long anElement(final long[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public float anElement(final float[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public double anElement(final double[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public boolean anElement(final boolean[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> public <T> T anElement(final T[] elements) {
> final int randomIdx = values().anInt(elements.length);
> return elements[randomIdx];
> }
> }
> public class Dates {
> public LocalDate around(final Period period) {
> final LocalDate now = clockService.now();
> return values().aCoinFlip() ? before(period): after(period);
> }
> public LocalDate before(final Period period) {
> final LocalDate now = clockService.now();
> return now.minus(period);
> }
> public LocalDate after(final Period period) {
> final LocalDate now = clockService.now();
> return now.plus(period);
> }
> }
> public class Periods {
> public Period days(final int minDays, final int maxDays) {
> return Period.days(values().anInt(minDays, maxDays));
> }
> public Period daysUpTo(final int maxDays) {
> return days(0, maxDays);
> }
> public Period months(final int minMonths, final int maxMonths) {
> return Period.months(values().anInt(minMonths, maxMonths));
> }
> public Period monthsUpTo(final int months) {
> return months(0, months);
> }
> public Period years(final int minYears, final int maxYears) {
> return Period.years(values().anInt(minYears, maxYears));
> }
> public Period yearsUpTo(final int years) {
> return years(0, years);
> }
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)