source: java/main/src/main/java/com/framsticks/params/SimpleAbstractAccess.java @ 193

Last change on this file since 193 was 193, checked in by Maciej Komosinski, 10 years ago

Set svn:eol-style native for all textual files

  • Property svn:eol-style set to native
File size: 3.0 KB
Line 
1package com.framsticks.params;
2
3import com.framsticks.params.types.ObjectParam;
4import com.framsticks.util.FramsticksException;
5
6/**
7 * The Class SimpleAbstractAccess implements all the methods of Access
8 * which actions can be implemented with usage of {@link Access} methods
9 * or concern schema, which is stored in {@link #framsClass}
10 *
11 * Based on c++ class SimpleAbstractParam located in: cpp/gdk/param.*
12 *
13 * @author Jarek Szymczak <name.surname@gmail.com>, Mateusz Jarus (please
14 *         replace name and surname with my personal data)
15 *
16 * @author Piotr Sniegowski
17 */
18public abstract class SimpleAbstractAccess implements ObjectAccess {
19
20        protected final FramsClass framsClass;
21
22        /**
23         * @param framsClass
24         */
25        public SimpleAbstractAccess(FramsClass framsClass) {
26                this.framsClass = framsClass;
27        }
28
29        @Override
30        public final FramsClass getFramsClass() {
31                return framsClass;
32        }
33
34        @Override
35        public String getTypeId() {
36                return framsClass.getId();
37        }
38
39        @Override
40        public int getParamCount() {
41                return framsClass.getParamCount();
42        }
43
44        @Override
45        public Param getParam(int i) {
46                return framsClass.getParam(i);
47        }
48
49        @Override
50        public Param getParam(String id) {
51                return framsClass.getParam(id);
52        }
53
54        // @Override
55        // public Param getGroupMember(int gi, int n) {
56        //      return framsClass.getGroupMember(gi, n);
57        // }
58
59        @Override
60        public <T> T get(int i, Class<T> type) {
61                return get(ParamsUtil.getParam(framsClass, i, ValueParam.class), type);
62        }
63
64        @Override
65        public <T> T get(String id, Class<T> type) {
66                return get(ParamsUtil.getParam(framsClass, id, ValueParam.class), type);
67        }
68
69        @Override
70        public <T> int set(int i, T value) {
71                return set(ParamsUtil.getParam(framsClass, i, ValueParam.class), value);
72        }
73
74        @Override
75        public <T> int set(String id, T value) {
76                return set(ParamsUtil.getParam(framsClass, id, ValueParam.class), value);
77        }
78
79        @Override
80        public <T> int set(ValueParam param, T value) {
81
82                //String id = param.getEffectiveId();
83                try {
84                        Object oldValue = get(param, param.getStorageType());
85                        ReassignResult<?> result = param.reassign(value, oldValue);
86                        Object casted = result.getValue();
87                        if (casted != null && !casted.equals(oldValue)) {
88                                internalSet(param, casted);
89                        }
90                        return result.getFlags();
91                } catch (CastFailure e) {
92                        throw new FramsticksException()
93                                .msg("casting failure while set")
94                                .arg("param", param)
95                                .arg("value", value)
96                                .arg("value's type", (value == null ? "<null>" : value.getClass().getCanonicalName()))
97                                .arg("in", this).cause(e);
98                }
99        }
100
101
102        protected abstract <T> void internalSet(ValueParam param, T value);
103
104        @Override
105        public Iterable<Param> getParams() {
106                return framsClass.getParams();
107        }
108
109        @Override
110        public int getCompositeParamCount() {
111                return framsClass.getCompositeParamCount();
112        }
113
114        @Override
115        public CompositeParam getCompositeParam(int number) {
116                return framsClass.getCompositeParam(number);
117        }
118
119        @Override
120        public ParamBuilder buildParam(ParamBuilder builder) {
121                return builder.name(getTypeId()).type(ObjectParam.class).containedTypeName(getTypeId());
122        }
123
124}
Note: See TracBrowser for help on using the repository browser.