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.wicket.core.util.objects.checker;
018
019import java.util.List;
020
021import org.apache.wicket.model.LoadableDetachableModel;
022
023/**
024 * An implementation of {@link IObjectChecker} that returns a failure
025 * result when the checked object is a {@link LoadableDetachableModel}
026 * and it is model object is still attached.
027 */
028public class NotDetachedModelChecker extends AbstractObjectChecker
029{
030        /**
031         * Constructor.
032         *
033         * Checks all passed objects.
034         */
035        public NotDetachedModelChecker()
036        {
037                super();
038        }
039
040        /**
041         * Constructor.
042         *
043         * Checks objects which types are not excluded.
044         *
045         * @param exclusions
046         *      a list of types which should not be checked
047         */
048        public NotDetachedModelChecker(List<Class<?>> exclusions)
049        {
050                super(exclusions);
051        }
052
053        @Override
054        public Result doCheck(Object obj)
055        {
056                Result result = Result.SUCCESS;
057
058                if (obj instanceof LoadableDetachableModel<?>)
059                {
060                        LoadableDetachableModel<?> model = (LoadableDetachableModel<?>) obj;
061                        if (model.isAttached())
062                        {
063                                result = new Result(Result.Status.FAILURE, "Not detached model found!");
064                        }
065                }
066
067                return result;
068        }
069}