1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.common.support;
21
22 import java.lang.reflect.Method;
23
24 import org.apache.mina.common.DefaultIoFilterChainBuilder;
25 import org.apache.mina.common.ExecutorThreadModel;
26 import org.apache.mina.common.IoFilterChainBuilder;
27 import org.apache.mina.common.IoServiceConfig;
28 import org.apache.mina.common.ThreadModel;
29
30
31
32
33
34
35
36 public abstract class BaseIoServiceConfig implements IoServiceConfig, Cloneable {
37
38
39
40 private IoFilterChainBuilder filterChainBuilder = new DefaultIoFilterChainBuilder();
41
42
43
44
45 private ThreadModel defaultThreadModel;
46
47
48
49
50 private ThreadModel threadModel;
51
52 public BaseIoServiceConfig() {
53 super();
54 }
55
56 public IoFilterChainBuilder getFilterChainBuilder() {
57 return filterChainBuilder;
58 }
59
60 public void setFilterChainBuilder(IoFilterChainBuilder builder) {
61 if (builder == null) {
62 builder = new DefaultIoFilterChainBuilder();
63 }
64 filterChainBuilder = builder;
65 }
66
67 public DefaultIoFilterChainBuilder getFilterChain() {
68 if (filterChainBuilder instanceof DefaultIoFilterChainBuilder) {
69 return (DefaultIoFilterChainBuilder) filterChainBuilder;
70 } else {
71 throw new IllegalStateException(
72 "Current filter chain builder is not a DefaultIoFilterChainBuilder.");
73 }
74 }
75
76 public ThreadModel getThreadModel() {
77 if (threadModel == null) {
78 threadModel = getDefaultThreadModel();
79 }
80 return threadModel;
81 }
82
83 public void setThreadModel(ThreadModel threadModel) {
84 if (threadModel == null) {
85
86
87 threadModel = getDefaultThreadModel();
88 }
89 this.threadModel = threadModel;
90 }
91
92 private synchronized ThreadModel getDefaultThreadModel() {
93 if (defaultThreadModel == null) {
94 defaultThreadModel = ExecutorThreadModel.getInstance("AnonymousIoService");
95 }
96 return defaultThreadModel;
97 }
98 @Override
99 public Object clone() {
100 BaseIoServiceConfig ret;
101 try {
102 ret = (BaseIoServiceConfig) super.clone();
103 } catch (CloneNotSupportedException e) {
104 throw (InternalError) new InternalError().initCause(e);
105 }
106
107
108 try {
109 Method cloneMethod = this.filterChainBuilder.getClass().getMethod(
110 "clone");
111 if (cloneMethod.isAccessible()) {
112 ret.filterChainBuilder = (IoFilterChainBuilder) cloneMethod
113 .invoke(this.filterChainBuilder);
114 }
115 } catch (Exception e) {
116
117 }
118
119 return ret;
120 }
121 }