package org.kralandce.krapi.core.model.kraland;

import static com.google.common.base.Preconditions.checkNotNull;

public final class MKJob {
    private MKJob() {

    }

    public static final class Name {
        private final String name;

        private Name(String jobName) {
            this.name = checkNotNull(jobName);
        }

        public static Name of(String value) {
            return new Name(value);
        }

        public String asString() {
            return this.name;
        }

        @Override
        public boolean equals(Object o) {
            if( this == o ) return true;
            if( o == null || getClass() != o.getClass() ) return false;

            Name that = (Name) o;

            return this.name.equals(that.name);
        }

        @Override
        public int hashCode() {
            return this.name.hashCode();
        }
    }

    public static final class AccumulatedLevel {
        private final int level;

        private AccumulatedLevel(int accumulatedLevel) {
            this.level = accumulatedLevel;
        }

        public static AccumulatedLevel of(int value) {
            return new AccumulatedLevel(value);
        }

        public int asInt() {
            return this.level;
        }

        @Override
        public boolean equals(Object o) {
            if( this == o ) return true;
            if( o == null || getClass() != o.getClass() ) return false;

            AccumulatedLevel that = (AccumulatedLevel) o;

            return this.level == that.level;
        }

        @Override
        public int hashCode() {
            return this.level;
        }
    }

    public static final class Identifier {
        private final int id;

        private Identifier(int identifier) {
            this.id = identifier;
        }

        public static Identifier of(int value) {
            return new Identifier(value);
        }

        public int asInt() {
            return this.id;
        }

        @Override
        public boolean equals(Object o) {
            if( this == o ) return true;
            if( o == null || getClass() != o.getClass() ) return false;

            Identifier that = (Identifier) o;

            return this.id == that.id;
        }

        @Override
        public int hashCode() {
            return this.id;
        }
    }
}

@@ -2344,11 +2344,681 @@
  %7D%0A    %7D
+%0A%0A    public static final class Area %7B%0A        private final int area;%0A%0A        private Area(int jobArea) %7B%0A            this.area = jobArea;%0A        %7D%0A%0A        public static Area of(int value) %7B%0A            return new Area(value);%0A        %7D%0A%0A        public int asInt() %7B%0A            return this.area;%0A        %7D%0A%0A        @Override%0A        public boolean equals(Object o) %7B%0A            if( this == o ) return true;%0A            if( o == null %7C%7C getClass() != o.getClass() ) return false;%0A%0A            Area that = (Area) o;%0A%0A            return this.area == that.area;%0A        %7D%0A%0A        @Override%0A        public int hashCode() %7B%0A            return this.area;%0A        %7D%0A    %7D
 %0A%7D%0A

Add Area wrapper for jobs ( job reach : city for mayor etc.., province for governor etc.. ).