libreccm-legacy/ccm-ldn-userpreferences/src/com/arsdigita/london/userprefs/ui/UserPrefsComponent.java

137 lines
4.9 KiB
Java
Executable File

/*
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation; either version 2.1 of
the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.arsdigita.london.userprefs.ui;
import com.arsdigita.london.userprefs.UserPrefs;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.bebop.event.RequestEvent;
import com.arsdigita.bebop.event.RequestListener;
import com.arsdigita.bebop.parameters.BooleanParameter;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.web.RedirectSignal;
import com.arsdigita.xml.Element;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import org.apache.log4j.Logger;
public class UserPrefsComponent extends SimpleComponent {
private static final Logger s_log =
Logger.getLogger( UserPrefsComponent.class );
public static final String XMLNS = "http://xmlns.redhat.com/userprefs/1.0";
public UserPrefsComponent() {
super();
}
private final StringParameter m_setKey = new StringParameter( "pref.set.key" );
private final StringParameter m_setValue = new StringParameter( "pref.set.value" );
private final StringParameter m_remove = new StringParameter( "pref.remove" );
private final BooleanParameter m_immediate = new BooleanParameter( "pref.immediate" );
@Override
public void generateXML( PageState ps, Element parent ) {
UserPrefs prefs = UserPrefs.retrieve( ps.getRequest(),
ps.getResponse() );
Element rootE = parent.newChildElement( "up:userPreferences", XMLNS );
Iterator values = prefs.getAll();
while( values.hasNext() ) {
Map.Entry pref = (Map.Entry) values.next();
String key = (String) pref.getKey();
String value = (String) pref.getValue();
Element prefE = rootE.newChildElement( "up:preference", XMLNS );
prefE.addAttribute( "key", key );
if( null != value ) {
prefE.addAttribute( "value", value );
}
}
}
@Override
public void register( Page p ) {
super.register( p );
p.addGlobalStateParam( m_setKey );
p.addGlobalStateParam( m_setValue );
p.addGlobalStateParam( m_remove );
p.addGlobalStateParam( m_immediate );
p.addRequestListener( new RequestListener() {
@Override
public void pageRequested( RequestEvent ev ) {
PageState ps = ev.getPageState();
String setKey = (String) ps.getValue( m_setKey );
String setValue = (String) ps.getValue( m_setValue );
String remove = (String) ps.getValue( m_remove );
UserPrefs prefs = UserPrefs.retrieve( ps.getRequest(),
ps.getResponse() );
boolean acted = false;
if( null != setKey ) {
if( s_log.isDebugEnabled() ) {
s_log.debug( "Set in " +
ps.getRequest().getRequestURI() + '?' +
ps.getRequest().getQueryString() );
}
prefs.set( setKey, setValue,
ps.getRequest(), ps.getResponse() );
acted = true;
}
if( null != remove ) {
if( s_log.isDebugEnabled() ) {
s_log.debug( "Remove in " +
ps.getRequest().getRequestURI() + '?' +
ps.getRequest().getQueryString() );
}
prefs.remove( remove, ps.getRequest() );
acted = true;
}
if( acted ) {
ps.setValue( m_setKey, null );
ps.setValue( m_setValue, null );
ps.setValue( m_remove, null );
try {
throw new RedirectSignal( ps.stateAsURL(), true );
} catch( IOException ex ) {
throw new UncheckedWrapperException( ex );
}
}
}
} );
}
}