001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.camel.management.mbean;
018
019import org.apache.camel.CamelContext;
020import org.apache.camel.api.management.ManagedResource;
021import org.apache.camel.api.management.mbean.ManagedStreamCachingStrategyMBean;
022import org.apache.camel.spi.StreamCachingStrategy;
023
024@ManagedResource(description = "Managed StreamCachingStrategy")
025public class ManagedStreamCachingStrategy extends ManagedService implements ManagedStreamCachingStrategyMBean {
026
027    private final CamelContext camelContext;
028    private final StreamCachingStrategy streamCachingStrategy;
029    private final String[] allowClasses;
030    private final String[] denyClasses;
031
032    public ManagedStreamCachingStrategy(CamelContext camelContext, StreamCachingStrategy streamCachingStrategy) {
033        super(camelContext, streamCachingStrategy);
034        this.camelContext = camelContext;
035        this.streamCachingStrategy = streamCachingStrategy;
036        if (streamCachingStrategy.getAllowClasses() != null) {
037            this.allowClasses = streamCachingStrategy.getAllowClasses()
038                    .stream().map(Class::getName)
039                    .toArray(String[]::new);
040        } else {
041            this.allowClasses = null;
042        }
043        if (streamCachingStrategy.getDenyClasses() != null) {
044            this.denyClasses = streamCachingStrategy.getDenyClasses()
045                    .stream().map(Class::getName)
046                    .toArray(String[]::new);
047        } else {
048            this.denyClasses = null;
049        }
050    }
051
052    public CamelContext getCamelContext() {
053        return camelContext;
054    }
055
056    public StreamCachingStrategy getStreamCachingStrategy() {
057        return streamCachingStrategy;
058    }
059
060    @Override
061    public boolean isEnabled() {
062        return streamCachingStrategy.isEnabled();
063    }
064
065    @Override
066    public String[] getAllowClasses() {
067        return allowClasses;
068    }
069
070    @Override
071    public String[] getDenyClasses() {
072        return denyClasses;
073    }
074
075    @Override
076    public boolean isSpoolEnabled() {
077        return streamCachingStrategy.isSpoolEnabled();
078    }
079
080    @Override
081    public String getSpoolDirectory() {
082        if (streamCachingStrategy.getSpoolDirectory() != null) {
083            return streamCachingStrategy.getSpoolDirectory().getPath();
084        } else {
085            return null;
086        }
087    }
088
089    @Override
090    public String getSpoolCipher() {
091        return streamCachingStrategy.getSpoolCipher();
092    }
093
094    @Override
095    public void setSpoolThreshold(long threshold) {
096        streamCachingStrategy.setSpoolThreshold(threshold);
097    }
098
099    @Override
100    public long getSpoolThreshold() {
101        return streamCachingStrategy.getSpoolThreshold();
102    }
103
104    @Override
105    public void setSpoolUsedHeapMemoryThreshold(int percentage) {
106        streamCachingStrategy.setSpoolUsedHeapMemoryThreshold(percentage);
107    }
108
109    @Override
110    public int getSpoolUsedHeapMemoryThreshold() {
111        return streamCachingStrategy.getSpoolUsedHeapMemoryThreshold();
112    }
113
114    @Override
115    public void setSpoolUsedHeapMemoryLimit(SpoolUsedHeapMemoryLimit limit) {
116        StreamCachingStrategy.SpoolUsedHeapMemoryLimit l;
117        if (limit == null) {
118            l = null;
119        } else {
120            l = switch (limit) {
121                case Committed -> StreamCachingStrategy.SpoolUsedHeapMemoryLimit.Committed;
122                case Max -> StreamCachingStrategy.SpoolUsedHeapMemoryLimit.Max;
123            };
124        }
125        streamCachingStrategy.setSpoolUsedHeapMemoryLimit(l);
126    }
127
128    @Override
129    public SpoolUsedHeapMemoryLimit getSpoolUsedHeapMemoryLimit() {
130        StreamCachingStrategy.SpoolUsedHeapMemoryLimit l = streamCachingStrategy.getSpoolUsedHeapMemoryLimit();
131        if (l == null) {
132            return null;
133        } else {
134            return switch (l) {
135                case Committed -> SpoolUsedHeapMemoryLimit.Committed;
136                case Max -> SpoolUsedHeapMemoryLimit.Max;
137            };
138        }
139    }
140
141    @Override
142    public void setBufferSize(int bufferSize) {
143        streamCachingStrategy.setBufferSize(bufferSize);
144    }
145
146    @Override
147    public int getBufferSize() {
148        return streamCachingStrategy.getBufferSize();
149    }
150
151    @Override
152    public void setRemoveSpoolDirectoryWhenStopping(boolean remove) {
153        streamCachingStrategy.setRemoveSpoolDirectoryWhenStopping(remove);
154    }
155
156    @Override
157    public boolean isRemoveSpoolDirectoryWhenStopping() {
158        return streamCachingStrategy.isRemoveSpoolDirectoryWhenStopping();
159    }
160
161    @Override
162    public void setAnySpoolRules(boolean any) {
163        streamCachingStrategy.setAnySpoolRules(any);
164    }
165
166    @Override
167    public boolean isAnySpoolRules() {
168        return streamCachingStrategy.isAnySpoolRules();
169    }
170
171    @Override
172    public long getCacheMemoryCounter() {
173        return streamCachingStrategy.getStatistics().getCacheMemoryCounter();
174    }
175
176    @Override
177    public long getCacheMemorySize() {
178        return streamCachingStrategy.getStatistics().getCacheMemorySize();
179    }
180
181    @Override
182    public long getCacheMemoryAverageSize() {
183        return streamCachingStrategy.getStatistics().getCacheMemoryAverageSize();
184    }
185
186    @Override
187    public long getCacheSpoolCounter() {
188        return streamCachingStrategy.getStatistics().getCacheSpoolCounter();
189    }
190
191    @Override
192    public long getCacheSpoolSize() {
193        return streamCachingStrategy.getStatistics().getCacheSpoolSize();
194    }
195
196    @Override
197    public long getCacheSpoolAverageSize() {
198        return streamCachingStrategy.getStatistics().getCacheSpoolAverageSize();
199    }
200
201    @Override
202    public boolean isStatisticsEnabled() {
203        return streamCachingStrategy.getStatistics().isStatisticsEnabled();
204    }
205
206    @Override
207    public void setStatisticsEnabled(boolean enabled) {
208        streamCachingStrategy.getStatistics().setStatisticsEnabled(enabled);
209    }
210
211    @Override
212    public void resetStatistics() {
213        streamCachingStrategy.getStatistics().reset();
214    }
215
216}