#####################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#####################################################################################

#####################################################################################
### Description and sample implementation
#####################################################################################

##Some parts of Trinidad aren't compatible with the DefaultWindowHandler
##-> implement a custom ClassDeactivator - e.g.:

#package org.apache.myfaces.examples.codi.trinidad.config;
#
#import org.apache.myfaces.extensions.cdi.core.api.activation.ClassDeactivator;
#import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.CodiRenderKitFactory;
#import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.WindowContextAwareViewHandler;
#
#import java.util.HashSet;
#import java.util.Set;
#
#public class TrinidadAwareClassDeactivator implements ClassDeactivator
#{
#    private static Set<Class> deactivatedClasses = new HashSet<Class>();
#
#    static
#    {
#        deactivatedClasses.add(CodiRenderKitFactory.class);
#        deactivatedClasses.add(WindowContextAwareViewHandler.class);
#    }
#
#    public Set<Class> getDeactivatedClasses()
#    {
#        return deactivatedClasses;
#    }
#}

#####################################################################################
### Configuration for this service-loader file
#####################################################################################
#org.apache.myfaces.examples.codi.trinidad.config.TrinidadAwareClassDeactivator

#####################################################################################
### Additional hint
#####################################################################################
##Don't forget to remove '#' in the example above.