package com.usemodj.forum.bean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.usemodj.forum.Location;
import com.usemodj.forum.domain.Topic;
/*
* function topic_class( $class = '', $key = 'topic', $id = 0 ) {
$topic = get_topic( get_topic_id( $id ) );
$class = $class ? explode(' ', $class ) : array();
if ( '1' === $topic->topic_status && bb_current_user_can( 'browse_deleted' ) )
$class[] = 'deleted';
elseif ( 1 < $topic->topic_status && bb_current_user_can( 'browse_deleted' ) )
$class[] = 'bozo';
if ( '0' === $topic->topic_open )
$class[] = 'closed';
if ( 1 == $topic->topic_sticky && ( bb_is_forum() || bb_is_view() ) )
$class[] = 'sticky';
elseif ( 2 == $topic->topic_sticky && ( bb_is_front() || bb_is_forum() ) )
$class[] = 'sticky super-sticky';
$class = apply_filters( 'topic_class', $class, $topic->topic_id );
$class = join(' ', $class);
alt_class( $key, $class );
}
*/
public class TopicCSS {
private static Logger logger = Logger.getLogger( TopicCSS.class);
Topic topic = null;
Set<String> cssClass = new HashSet<String>();
static HashMap<String, Integer> bbAlt = new HashMap<String, Integer>();
public TopicCSS(){
}
public TopicCSS( Topic topic) {
this.topic = topic;
}
public Topic getTopic() {
return topic;
}
public void setTopic(Topic topic) {
this.topic = topic;
}
public String getTopicClass( String cssClazz, Location location, boolean isBrowseDeleted) {
return getTopicClass(cssClazz, "topic", location, isBrowseDeleted);
}
public String getTopicClass( String cssClazz, short location, boolean isBrowseDeleted) {
return getTopicClass(cssClazz, "topic", location, isBrowseDeleted);
}
//TODO: getTopicClass: bb_current_user_can( 'browse_deleted' )
public String getTopicClass(String cssClazz, String key, Location location, boolean isBrowseDeleted) {
if( !StringUtils.isBlank(cssClazz)) {
String[] css = cssClazz.split(" ");
for( String c: css) {
this.cssClass.add( c);
}
}
if( 1 == topic.getTopicStatus() && isBrowseDeleted /* && bb_current_user_can( 'browse_deleted' ) */) {
cssClass.add("deleted");
} else if( 1 < topic.getTopicStatus() && isBrowseDeleted /* && bb_current_user_can( 'browse_deleted' ) */) {
cssClass.add("bozo");
}
if( 0 == topic.getTopicOpen())
cssClass.add("close");
if( 1 == topic.getTopicSticky() && ( location == Location.FORUM || location == Location.VIEW) /* && ( bb_is_forum() || bb_is_view() ) */ )
cssClass.add( "sticky");
else if( 2 == topic.getTopicSticky() && ( Location.FRONT.equals(location) || Location.FORUM.equals(location)) /* && ( bb_is_front() || bb_is_forum() ) */)
cssClass.add( "sticky super-sticky");
return altClass( key, join( cssClass, " "));
}
public String getTopicClass( String cssClazz, String key, short location, boolean isBrowseDeleted) {
if( !StringUtils.isBlank( cssClazz)) {
String[] css = cssClazz.split(" ");
for( String c: css) {
this.cssClass.add( c);
}
}
if( 1 == topic.getTopicStatus() && isBrowseDeleted /* && bb_current_user_can( 'browse_deleted' ) */) {
this.cssClass.add("deleted");
} else if( 1 < topic.getTopicStatus() && isBrowseDeleted /* && bb_current_user_can( 'browse_deleted' ) */) {
this.cssClass.add("bozo");
}
if( 0 == topic.getTopicOpen())
this.cssClass.add("close");
if( 1 == topic.getTopicSticky() && ( location == Location.FORUM.getNum() || location == Location.VIEW.getNum()) /* && ( bb_is_forum() || bb_is_view() ) */ )
this.cssClass.add( "sticky");
else if( 2 == topic.getTopicSticky() && ( location == Location.FRONT.getNum() || location == Location.FORUM.getNum()) /* && ( bb_is_front() || bb_is_forum() ) */)
this.cssClass.add( "sticky super-sticky");
return altClass( key, join( cssClass, " "));
}
public String altClass(String key, String cssClass) {
String css = "";
if( null == bbAlt.get(key))
bbAlt.put(key, -1);
int n = (Integer) bbAlt.get( key);
bbAlt.put(key, ++n);
cssClass = cssClass.trim();
n = (Integer) bbAlt.get( key) %2;
if( (null != cssClass) ^ 0 != n)
css = " class='"+( ( cssClass != null)? cssClass : "alt") +"'";
else if(null != cssClass && 0 != (Integer)bbAlt.get(key) % 2)
css = " class='"+ cssClass + " alt'";
//logger.debug(" ----- altClass css: "+ css);
return css;
}
public String join( Set<String> set, String separator) {
StringBuffer cssBuf = new StringBuffer();
for( String css: set) {
cssBuf.append( separator).append( css);
}
String str = cssBuf.toString().trim();
if( str.startsWith( separator))
str = str.substring(separator.length());
return str;
}
/*
* function bb_closed_label( $label ) {
global $topic;
if ( '0' === $topic->topic_open )
return sprintf(__('[closed] %s'), $label);
return $label;
}
*
*/
public String getClosedLabel( String label) {
//logger.debug("-- getClosedLabel topic.getTopicOpen(): " + topic.getTopicOpen() );
if( (byte)0 == this.topic.getTopicOpen())
return String.format("[closed] %s", label);
return label;
}
/*
* function bb_sticky_label( $label ) {
global $topic;
if (bb_is_front()) {
if ( '2' === $topic->topic_sticky ) {
return sprintf(__('[sticky] %s'), $label);
}
} else {
if ( '1' === $topic->topic_sticky || '2' === $topic->topic_sticky ) {
return sprintf(__('[sticky] %s'), $label);
}
}
return $label;
}
*/
public String getStickyLabel( String label, boolean isFront) {
if( isFront) {
if( 2 ==this. topic.getTopicSticky())
return String.format("[sticky] %s", label);
} else {
if( 1 == this.topic.getTopicSticky() || 2 == this.topic.getTopicSticky())
return String.format("[sticky] %s", label);
}
return label;
}
public String getClosedOrStickyLabel( String label, boolean isFront) {
String result = "";
result += getClosedLabel( label);
result += getStickyLabel( label, isFront);
return result;
}
public String getClosedOrStickyLabel( boolean isFront) {
return getClosedOrStickyLabel( " ", isFront);
}
public String getClosedOrStickyFront() {
return getClosedOrStickyLabel( " ", true);
}
}