Ignore:
Timestamp:
06/28/13 11:56:03 (11 years ago)
Author:
psniegowski
Message:

HIGHLIGHTS:

  • FramsClass? and contained Param are now immutable classes (like String),

which allows to refer to them concurrently without synchronization
(which for example in turn simplifies GUI management)

  • also make Path immutable (which was earlier only assumed)
  • add global cache for FramsClasses? created solely and automatically

on base of Java classes.

representations basing on given FramsClass?

  • above changes greatly improved GUI responsivness during browsing
  • furtherly improve Param class hierarchy
  • allow to inject actions on state changes into MultiParamLoader?
  • add more tests

CHANGELOG:

Add StatusListener? to MultiParamLoader?.

Minor refactorization in MultiParamLoader?.

First step with auto append.

Add SchemaTest?.

Improve Registry.

Clean up in Registry.

Work out Registry.

Use annotations for Param.

Fix ListChange?.

Improve fluent interface of the FramsClassBuilder?.

Done caching of ReflectionAccess?.Backend

Fix hashCode of Pair.

A step on a way to cache ReflectionAccess?.Backend

Make SimpleAbstractAccess?.framsClass a final field.

Add static cache for FramsClasses? based on java.

Only classes created strictly and automatically
based on java classes are using this cache.

Make all Params immutable.

Many improvement to make Param immutable.

Make PrimitiveParam? generic type.

Several changes to make Param immutable.

Make FramsClass? immutable.

Another improvement to Path immutability.

Several improvements to Path.

Improve PathTest?.

Configurarable MutabilityDetector?.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • java/main/src/main/java/com/framsticks/params/Param.java

    r86 r87  
    22
    33
    4 import com.framsticks.params.types.DecimalParam;
    5 import com.framsticks.params.types.StringParam;
     4import javax.annotation.concurrent.Immutable;
     5
     6import com.framsticks.params.annotations.FramsClassAnnotation;
     7import com.framsticks.params.annotations.ParamAnnotation;
    68
    79/**
     
    1416 * @author Piotr Śniegowski
    1517 */
     18@Immutable
     19@FramsClassAnnotation(id = "prop", name = "prop")
    1620public abstract class Param {
    1721
    1822        /** The parameter id. */
    19         protected String id;
     23        protected final String id;
    2024
     25        //TODO
    2126        /**
    2227         * The parameter internal id. It's set by a user to use user's own getId in
    2328         * code
    2429         */
    25         protected String internalId;
     30        protected final String internalId;
    2631
    2732        /** The parameter name. */
    28         protected String name;
     33        protected final String name;
    2934
    3035        /** The help (description) concerning parameter. */
    31         protected String help;
     36        protected final String help;
    3237
    3338        /** The number of group, that parameter belongs to. */
    34         protected Integer group;
     39        protected final Integer group;
    3540
    3641        /** The getFlags stored as a bit sum. */
    37         protected Integer flags;
     42        protected final Integer flags;
    3843
     44        //TODO
    3945        /** The variable determining whether the parameter is an extra parameter. */
    40         protected Integer extra;
     46        protected final Integer extra;
    4147
    42 
    43         public Param() {
    44 
     48        public Param(ParamBuilder builder) {
     49                id = builder.getId();
     50                internalId = builder.getInternalId();
     51                name = builder.getName();
     52                help = builder.getHelp();
     53                group = builder.getGroup();
     54                flags = builder.getFlags();
     55                extra = 0;
    4556        }
    4657
     58        @ParamAnnotation
    4759        public String getId() {
    4860                return id;
     
    5365        }
    5466
     67        @ParamAnnotation
    5568        public String getName() {
    5669                return name;
    5770        }
    5871
     72        @ParamAnnotation
    5973        public String getHelp() {
    6074                return help;
    6175        }
    6276
     77        @ParamAnnotation
    6378        public Integer getGroup() {
    6479                return group;
    6580        }
    6681
     82        @ParamAnnotation
    6783        public Integer getFlags() {
    6884                return flags;
     
    7995        public Integer getExtra() {
    8096                return extra;
    81         }
    82 
    83         public void setInternalId(String internalId) {
    84                 this.internalId = internalId;
    8597        }
    8698
     
    104116        }
    105117
    106         public static FramsClass getFramsClass() {
    107                 return new FramsClass("prop", "prop", null)
    108                         .append(Param.build().id("name").name("Name").type(StringParam.class).finish())
    109                         .append(Param.build().id("id").name("Id").type(StringParam.class).finish())
    110                         .append(Param.build().id("type").name("Type").type(StringParam.class).finish())
    111                         .append(Param.build().id("help").name("Help").type(StringParam.class).finish())
    112                         .append(Param.build().id("flags").name("Flags").type(DecimalParam.class).finish());
    113         }
    114 
    115118        public static ParamBuilder build() {
    116119                return new ParamBuilder();
    117120        }
    118121
     122        public static ParamBuilder build(FramsClassBuilder builder) {
     123                return new ParamBuilder(builder);
     124        }
     125
    119126}
Note: See TracChangeset for help on using the changeset viewer.