package com.planet_ink.coffee_mud.Common; import com.planet_ink.coffee_mud.core.interfaces.*; import com.planet_ink.coffee_mud.Libraries.interfaces.*; import com.planet_ink.coffee_mud.core.*; import com.planet_ink.coffee_mud.core.collections.*; import com.planet_ink.coffee_mud.Abilities.interfaces.*; import com.planet_ink.coffee_mud.Areas.interfaces.*; import com.planet_ink.coffee_mud.Behaviors.interfaces.*; import com.planet_ink.coffee_mud.CharClasses.interfaces.*; import com.planet_ink.coffee_mud.Commands.interfaces.*; import com.planet_ink.coffee_mud.Common.interfaces.*; import com.planet_ink.coffee_mud.Common.interfaces.Poll.PollOption; import com.planet_ink.coffee_mud.Common.interfaces.Poll.PollResult; import com.planet_ink.coffee_mud.Exits.interfaces.*; import com.planet_ink.coffee_mud.Items.interfaces.*; import com.planet_ink.coffee_mud.Locales.interfaces.*; import com.planet_ink.coffee_mud.MOBS.interfaces.*; import com.planet_ink.coffee_mud.Races.interfaces.*; import java.util.*; /* Copyright 2005-2016 Bo Zimmerman Licensed 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. */ public class DefaultPoll implements Poll { @Override public String ID() { return "DefaultPoll"; } @Override public String name() { return ID(); } @Override public CMObject newInstance() { try { return getClass().newInstance(); } catch (final Exception e) { return new DefaultPoll(); } } @Override public void initializeClass() { } @Override public int compareTo(CMObject o) { return CMClass.classID(this).compareToIgnoreCase(CMClass.classID(o)); } @Override public CMObject copyOf() { try { return (Poll) this.clone(); } catch (final CloneNotSupportedException e) { return newInstance(); } } public boolean loaded = false; protected String name = "POLL"; protected String subject = "Poll Results Title"; protected String description = "This is a Poll! Choose from the following:"; protected String author = "noone"; protected long expiration = 0; protected long bitmap = 0; protected String qualZapper = ""; protected List<PollOption> options = new Vector<PollOption>(); protected List<PollResult> results = new SVector<PollResult>(); @Override public boolean loaded() { return loaded; } @Override public void setLoaded(boolean truefalse) { loaded = truefalse; } @Override public String getName() { return name; } @Override public void setName(String newname) { name = newname; } @Override public String getSubject() { return subject; } @Override public void setSubject(String newsubject) { subject = newsubject; } @Override public String getDescription() { return description; } @Override public void setDescription(String newdescription) { description = newdescription; } @Override public String getAuthor() { return author; } @Override public void setAuthor(String newname) { author = newname; } @Override public long getFlags() { return bitmap; } @Override public void setFlags(long flag) { bitmap = flag; } @Override public String getQualZapper() { return qualZapper; } @Override public void setQualZapper(String newZap) { qualZapper = newZap; } @Override public long getExpiration() { return expiration; } @Override public void setExpiration(long time) { expiration = time; } @Override public List<PollOption> getOptions() { return options; } @Override public void setOptions(List<PollOption> V) { options = V; } @Override public List<PollResult> getResults() { return results; } @Override public void setResults(List<PollResult> V) { results = V; } @Override public String getOptionsXML() { if (options.size() == 0) return "<OPTIONS />"; final StringBuffer str = new StringBuffer("<OPTIONS>"); PollOption PO = null; for (int i = 0; i < options.size(); i++) { PO = options.get(i); str.append("<OPTION>"); str.append(CMLib.xml().convertXMLtoTag("TEXT", CMLib.xml().parseOutAngleBrackets(PO.text))); str.append("</OPTION>"); } str.append("</OPTIONS>"); return str.toString(); } @Override public String getResultsXML() { if (results.size() == 0) return "<RESULTS />"; final StringBuffer str = new StringBuffer("<RESULTS>"); PollResult PR = null; for (int i = 0; i < results.size(); i++) { PR = results.get(i); str.append("<RESULT>"); str.append(CMLib.xml().convertXMLtoTag("USER", PR.user)); str.append(CMLib.xml().convertXMLtoTag("IP", PR.ip)); str.append(CMLib.xml().convertXMLtoTag("ANS", PR.answer)); str.append("</RESULT>"); } str.append("</RESULTS>"); return str.toString(); } @Override public PollResult getMyVote(MOB mob) { if (mob == null) return null; CMLib.polls().loadPollIfNecessary(this); PollResult R = null; final Session S = mob.session(); for (int r = 0; r < results.size(); r++) { R = results.get(r); if ((mob.Name().equals(R.user))) return R; if (R.ip.length() > 0) { final String address = (S != null) ? S.getAddress() : "\n\r\t"; final String accountName; final PlayerStats pstats = mob.playerStats(); if ((pstats != null) && (pstats.getAccount() != null)) accountName = "\t" + pstats.getAccount().getAccountName(); else accountName = "\t\n"; if ((R.ip.equals(address) || R.ip.startsWith(address + "\t") || R.ip.endsWith(accountName))) return R; } } return null; } @Override public void addVoteResult(PollResult R) { CMLib.polls().loadPollIfNecessary(this); results.add(R); CMLib.polls().updatePollResults(this); } @Override public boolean mayIVote(MOB mob) { if (mob == null) return false; if (!CMath.bset(bitmap, FLAG_ACTIVE)) return false; if (!CMLib.masking().maskCheck(qualZapper, mob, true)) return false; if ((expiration > 0) && (System.currentTimeMillis() > expiration)) { bitmap = CMath.unsetb(bitmap, FLAG_ACTIVE); CMLib.polls().updatePoll(name, this); return false; } if (getMyVote(mob) != null) return false; return true; } @Override public boolean mayISeeResults(MOB mob) { if (mob == null) return false; if (!CMLib.masking().maskCheck(qualZapper, mob, true)) return false; if (CMath.bset(bitmap, FLAG_HIDERESULTS) && (!CMSecurity.isAllowedAnywhere(mob, CMSecurity.SecFlag.POLLS))) return false; if (CMath.bset(bitmap, FLAG_PREVIEWRESULTS)) return true; if ((expiration > 0) && (System.currentTimeMillis() < expiration)) return false; if ((getMyVote(mob) == null) && (!CMath.bset(bitmap, FLAG_ABSTAIN))) return false; return true; } }