Im SummaryTab für SciDepartment werden jetzt zusätzlich die stellvertretende Abteilungsleitung und das Sekretriat im XML ausgegeben. Notwendig für Ticket #1894.

git-svn-id: https://svn.libreccm.org/ccm/trunk@2384 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-10-25 12:07:46 +00:00
parent f4b852e45c
commit e672128cbe
5 changed files with 227 additions and 122 deletions

View File

@ -35,17 +35,17 @@ import org.apache.log4j.Logger;
public abstract class GenericOrgaUnitExtraXmlGenerator
implements ExtraXMLGenerator {
private final static Logger logger =
private final static Logger LOGGER =
Logger.getLogger(
GenericOrgaUnitExtraXmlGenerator.class);
private boolean listMode = false;
private final static String SELECTED_TAB_PARAM = "selectedTab";
private String showOnly;
@Override
public void generateXML(final ContentItem item,
final Element element,
final PageState state) {
final long start = System.currentTimeMillis();
if (!(item instanceof GenericOrganizationalUnit)) {
throw new IllegalArgumentException(
"This ExtraXMLGenerator supports "
@ -85,7 +85,7 @@ public abstract class GenericOrgaUnitExtraXmlGenerator
}
}
}
logger.debug(String.format(
LOGGER.debug(String.format(
"Created available tabs XML for "
+ "GenericOrganizationalUnit '%s' in %d ms.",
orgaunit.getName(),
@ -102,12 +102,6 @@ public abstract class GenericOrgaUnitExtraXmlGenerator
} else {
orgaUnitTabsElem.newChildElement("selectedTabNotAvailable");
}
logger.debug(String.format("Generated XML for GenericOrganizationalUnit "
+ "'%s' in %d ms",
orgaunit.getName(),
System.currentTimeMillis() - start));
}
/**
@ -158,7 +152,7 @@ public abstract class GenericOrgaUnitExtraXmlGenerator
processTabConfigToken(tabs, token);
}
logger.debug(String.format("Processed tab config in %d ms",
LOGGER.debug(String.format("Processed tab config in %d ms",
System.currentTimeMillis() - start));
return tabs;
}

View File

@ -9,7 +9,7 @@ import com.arsdigita.cms.contenttypes.SciDepartmentConfig;
* @version $Id$
*/
public class SciDepartmentExtraXmlGenerator
extends GenericOrgaUnitExtraXmlGenerator {
extends GenericOrgaUnitExtraXmlGenerator {
@Override
public String getTabConfig() {

View File

@ -23,12 +23,12 @@ import org.apache.log4j.Logger;
*/
public class SciDepartmentSummaryTab implements GenericOrgaUnitTab {
private final Logger logger = Logger.getLogger(SciDepartmentSummaryTab.class);
private final static SciDepartmentSummaryTabConfig config = new SciDepartmentSummaryTabConfig();
private static final Logger LOGGER = Logger.getLogger(SciDepartmentSummaryTab.class);
private final static SciDepartmentSummaryTabConfig CONFIG = new SciDepartmentSummaryTabConfig();
private String key;
static {
config.load();
CONFIG.load();
}
@Override
@ -59,7 +59,6 @@ public class SciDepartmentSummaryTab implements GenericOrgaUnitTab {
orgaunit.getClass().getName()));
}
final long start = System.currentTimeMillis();
final SciDepartment department = (SciDepartment) orgaunit;
final Element departmentSummaryElem = parent.newChildElement(
@ -67,94 +66,149 @@ public class SciDepartmentSummaryTab implements GenericOrgaUnitTab {
generateShortDescXml(department, departmentSummaryElem);
if (config.isShowingHead()) {
if (CONFIG.isShowingHead()) {
generateHeadOfDepartmentXml(department, departmentSummaryElem, state);
}
if (config.isShowingSubDepartment()) {
if (CONFIG.isShowingViceHead()) {
generateViceHeadOfDepartmentXml(department, departmentSummaryElem, state);
}
if (CONFIG.isShowingSecretriat()) {
generateSecretariatOfDepartmentXml(department, departmentSummaryElem, state);
}
if (CONFIG.isShowingSubDepartment()) {
generateSubDepartmentsXml(department, departmentSummaryElem, state);
}
if (config.isShowingContacts()) {
if (CONFIG.isShowingContacts()) {
generateContactsXml(department, departmentSummaryElem, state);
}
logger.debug(String.format("Generated XML for summary tab of department "
+ "'%s' in %d ms.",
orgaunit.getName(),
System.currentTimeMillis() - start));
}
protected void generateShortDescXml(final SciDepartment department,
final Element parent) {
final long start = System.currentTimeMillis();
if ((department != null)
&& (department.getDepartmentShortDescription() != null)
&& !department.getDepartmentShortDescription().trim().isEmpty()) {
final Element shortDescElem = parent.newChildElement("shortDesc");
shortDescElem.setText(department.getDepartmentShortDescription());
}
logger.debug(String.format("Generated short desc XML for department '%s' "
+ "in %d ms",
department.getName(),
System.currentTimeMillis() - start));
}
protected void generateHeadOfDepartmentXml(final SciDepartment department,
protected void generateSpecialRolesOfDepartmentXml(final SciDepartment department,
final Element parent,
final PageState state) {
final long start = System.currentTimeMillis();
final String headRoleStr = config.getHeadRole();
final String activeStatusStr = config.getActiveStatus();
final String[] headRoles = headRoleStr.split(",");
final PageState state,
final String role,
final String elemName) {
final String activeStatusStr = CONFIG.getActiveStatus();
final String[] roles = role.split(",");
final String[] activeStatuses = activeStatusStr.split(",");
final StringBuffer roleFilter = new StringBuffer();
for (String headRole : headRoles) {
for (String currentRole : roles) {
if (roleFilter.length() > 0) {
roleFilter.append(',');
}
roleFilter.append(String.format("%s = '%s'",
GenericOrganizationalUnitPersonCollection.LINK_PERSON_ROLE,
headRole));
currentRole));
}
final StringBuffer statusFilter = new StringBuffer();
for (String activeStatus : activeStatuses) {
if (statusFilter.length() > 0) {
statusFilter.append(",");
statusFilter.append(',');
}
statusFilter.append(String.format("%s = '%s'",
GenericOrganizationalUnitPersonCollection.LINK_STATUS,
activeStatus));
}
final Element headsElem = parent.newChildElement("heads");
final Element elem = parent.newChildElement(elemName);
final GenericOrganizationalUnitPersonCollection heads = department.
getPersons();
heads.addFilter(roleFilter.toString());
heads.addFilter(statusFilter.toString());
heads.addOrder("name");
final GenericOrganizationalUnitPersonCollection persons = department.getPersons();
persons.addFilter(roleFilter.toString());
persons.addFilter(statusFilter.toString());
persons.addOrder("name");
while (heads.next()) {
generateHeadXml(heads.getPerson(), headsElem, state);
while (persons.next()) {
generateSpecialRoleXml(persons.getPerson(), elem, state, "head");
}
logger.debug(String.format("Generated head of department XML for department '%s' "
+ "in %d ms",
department.getName(),
System.currentTimeMillis() - start));
}
protected void generateHeadOfDepartmentXml(final SciDepartment department,
final Element parent,
final PageState state) {
generateSpecialRolesOfDepartmentXml(department,
parent,
state,
CONFIG.getHeadRole(),
"heads");
// final String headRoleStr = config.getHeadRole();
// final String activeStatusStr = config.getActiveStatus();
// final String[] headRoles = headRoleStr.split(",");
// final String[] activeStatuses = activeStatusStr.split(",");
//
// final StringBuffer roleFilter = new StringBuffer();
// for (String headRole : headRoles) {
// if (roleFilter.length() > 0) {
// roleFilter.append(',');
// }
// roleFilter.append(String.format("%s = '%s'",
// GenericOrganizationalUnitPersonCollection.LINK_PERSON_ROLE,
// headRole));
// }
//
// final StringBuffer statusFilter = new StringBuffer();
// for (String activeStatus : activeStatuses) {
// if (statusFilter.length() > 0) {
// statusFilter.append(",");
// }
// statusFilter.append(String.format("%s = '%s'",
// GenericOrganizationalUnitPersonCollection.LINK_STATUS,
// activeStatus));
// }
//
// final Element headsElem = parent.newChildElement("heads");
//
// final GenericOrganizationalUnitPersonCollection heads = department.
// getPersons();
// heads.addFilter(roleFilter.toString());
// heads.addFilter(statusFilter.toString());
// heads.addOrder("name");
//
// while (heads.next()) {
// generateHeadXml(heads.getPerson(), headsElem, state);
// }
}
protected void generateViceHeadOfDepartmentXml(final SciDepartment department,
final Element parent,
final PageState state) {
generateSpecialRolesOfDepartmentXml(department,
parent,
state,
CONFIG.getViceHeadRole(),
"viceheads");
}
protected void generateSecretariatOfDepartmentXml(final SciDepartment department,
final Element parent,
final PageState state) {
generateSpecialRolesOfDepartmentXml(department,
parent,
state,
CONFIG.getSecretariatRole(),
"secretariat");
}
protected void generateSubDepartmentsXml(final SciDepartment department,
final Element parent,
final PageState state) {
final long start = System.currentTimeMillis();
final GenericOrganizationalUnitSubordinateCollection subDepartments = department.
getSubordinateOrgaUnits();
subDepartments.addFilter(
@ -170,19 +224,12 @@ public class SciDepartmentSummaryTab implements GenericOrgaUnitTab {
subDepsElem,
state);
}
logger.debug(String.format("Generated sub departments XML for department '%s' "
+ "in %d ms",
department.getName(),
System.currentTimeMillis() - start));
}
protected void generateSubDepartmentXml(
final GenericOrganizationalUnit orgaunit,
final Element parent,
final PageState state) {
final long start = System.currentTimeMillis();
if (!(orgaunit instanceof SciDepartment)) {
throw new IllegalArgumentException(String.format(
"Can't process "
@ -201,42 +248,39 @@ public class SciDepartmentSummaryTab implements GenericOrgaUnitTab {
nameElem.setText(subDepartment.getTitle());
generateHeadOfDepartmentXml(subDepartment, subDepElem, state);
logger.debug(String.format("Generated XML for sub department '%s' "
+ "in %d ms",
orgaunit.getName(),
System.currentTimeMillis() - start));
}
protected void generateHeadXml(final BigDecimal memberId,
// protected void generateHeadXml(final BigDecimal memberId,
// final Element parent,
// final PageState state) {
// final GenericPerson member = new GenericPerson(memberId);
// generateHeadXml(member, parent, state);
// }
protected void generateSpecialRoleXml(final GenericPerson member,
final Element parent,
final PageState state) {
final long start = System.currentTimeMillis();
final GenericPerson member = new GenericPerson(memberId);
logger.debug(String.format("Got domain object for member '%s' "
+ "in %d ms.",
member.getFullName(),
System.currentTimeMillis() - start));
generateHeadXml(member, parent, state);
}
protected void generateHeadXml(final GenericPerson member,
final Element parent,
final PageState state) {
final long start = System.currentTimeMillis();
final PageState state,
final String elemName) {
final XmlGenerator generator = new XmlGenerator(member);
if (CONFIG.isShowingRoleContacts()) {
generator.setUseExtraXml(true);
} else {
generator.setUseExtraXml(false);
generator.setItemElemName("head", "");
}
generator.setItemElemName(elemName, "");
generator.generateXML(state, parent, "");
logger.debug(String.format("Generated XML for member '%s' in %d ms.",
member.getFullName(),
System.currentTimeMillis() - start));
}
// protected void generateHeadXml(final GenericPerson member,
// final Element parent,
// final PageState state) {
// final XmlGenerator generator = new XmlGenerator(member);
// generator.setUseExtraXml(false);
// generator.setItemElemName("head", "");
// generator.generateXML(state, parent, "");
// }
protected void generateContactsXml(final SciDepartment department,
final Element parent,
final PageState state) {
final long start = System.currentTimeMillis();
final GenericOrganizationalUnitContactCollection contacts = department.
getContacts();
@ -252,26 +296,18 @@ public class SciDepartmentSummaryTab implements GenericOrgaUnitTab {
contactsElem,
state);
}
logger.debug(String.format("Generated XML for contacts of project '%s'"
+ " in %d ms.",
department.getName(),
System.currentTimeMillis() - start));
}
protected void generateContactXml(final GenericContact contact,
final String contactType,
final Element parent,
final PageState state) {
final long start = System.currentTimeMillis();
final XmlGenerator generator = new XmlGenerator(contact);
generator.setUseExtraXml(false);
generator.setItemElemName("contact", "");
generator.addItemAttribute("contactType",
getContactTypeName(contactType));
generator.generateXML(state, parent, "");
logger.debug(String.format("Generated XML for contact '%s' in %d ms.",
contact.getName(),
System.currentTimeMillis() - start));
}
private String getContactTypeName(final String contactTypeKey) {

View File

@ -14,26 +14,55 @@ public class SciDepartmentSummaryTabConfig extends AbstractConfig {
private final Parameter showHeads;
private final Parameter headRole;
private final Parameter showViceHeads;
private final Parameter viceHeadRole;
private final Parameter showSecretariat;
private final Parameter secretariatRole;
private final Parameter showRoleContacts;
private final Parameter activeStatus;
private final Parameter showSubDepartments;
private final Parameter showContacts;
public SciDepartmentSummaryTabConfig() {
super();
showHeads =
new BooleanParameter(
showHeads = new BooleanParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.show",
Parameter.REQUIRED,
true);
headRole =
new StringParameter(
headRole = new StringParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.role",
Parameter.REQUIRED,
"head");
showViceHeads = new BooleanParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.show",
Parameter.REQUIRED,
true);
viceHeadRole = new StringParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.role",
Parameter.REQUIRED,
"vicehead");
showSecretariat = new BooleanParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.show",
Parameter.REQUIRED,
true);
secretariatRole = new StringParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.role",
Parameter.REQUIRED,
"secretariat");
showRoleContacts = new BooleanParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.role_contacts.show",
Parameter.REQUIRED,
true);
activeStatus = new StringParameter(
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.status.active",
"com.arsdigita.cms.contenttypes.scidepartment.summarytab.status.active",
Parameter.REQUIRED,
"active");
@ -49,6 +78,11 @@ public class SciDepartmentSummaryTabConfig extends AbstractConfig {
register(showHeads);
register(headRole);
register(showViceHeads);
register(viceHeadRole);
register(showSecretariat);
register(secretariatRole);
register(showRoleContacts);
register(activeStatus);
register(showSubDepartments);
register(showContacts);
@ -64,6 +98,26 @@ public class SciDepartmentSummaryTabConfig extends AbstractConfig {
return (String) get(headRole);
}
public final boolean isShowingViceHead() {
return (Boolean) get(showViceHeads);
}
public final String getViceHeadRole() {
return (String) get(viceHeadRole);
}
public final boolean isShowingSecretriat() {
return (Boolean) get(showSecretariat);
}
public final String getSecretariatRole() {
return (String) get(secretariatRole);
}
public final boolean isShowingRoleContacts() {
return (Boolean) get(showRoleContacts);
}
public final String getActiveStatus() {
return (String) get(activeStatus);
}
@ -75,4 +129,5 @@ public class SciDepartmentSummaryTabConfig extends AbstractConfig {
public final boolean isShowingContacts() {
return (Boolean) get(showContacts);
}
}

View File

@ -5,13 +5,33 @@ com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.show.format = [Boo
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.role.title = Role of the heads of the department
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.role.purpose = Role of the heads of the department. This is an attribute of the association between GenericOrganizationalUnit and GenericPerson. This value may contains more than value, separated by ','.
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.role.example = active,heading
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.role.example = head
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.role.format = [String]
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.status.active.title = Status of active members
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.status.active.purpose = Status of the active members of the department. Used to filter out former heads. This is an attribute of the association between GenericOrganizationalUnit and GenericPerson. This value may contains more than value, separated by ','.
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.status.active.example = former,formerHead
com.arsdigita.cms.contenttypes.scidepartment.summarytab.heads.status.active.format = [String]
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.show.title = Show vice heads of department in summary tab?
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.show.purpose = Show vice heads of department in summary tab?
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.show.example = true
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.show.format = [Boolean]
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.role.title = Role of the vice heads of the department
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.role.purpose = Role of the vice heads of the department. This is an attribute of the association between GenericOrganizationalUnit and GenericPerson. This value may contains more than value, separated by ','.
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.role.example = vicehead
com.arsdigita.cms.contenttypes.scidepartment.summarytab.viceheads.role.format = [String]
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.show.title = Show secretariat of department in summary tab?
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.show.purpose = Show secretariat of department in summary tab?
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.show.example = true
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.show.format = [Boolean]
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.role.title = Role of secretaries of the department
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.role.purpose = Role of secretaries of the department. This is an attribute of the association between GenericOrganizationalUnit and GenericPerson. This value may contains more than value, separated by ','.
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.role.example = secretariat
com.arsdigita.cms.contenttypes.scidepartment.summarytab.secretariat.role.format = [String]
com.arsdigita.cms.contenttypes.scidepartment.summarytab.status.active.title = Status of active members
com.arsdigita.cms.contenttypes.scidepartment.summarytab.status.active.purpose = Status of the active members of the department. Used to filter out former heads. This is an attribute of the association between GenericOrganizationalUnit and GenericPerson. This value may contains more than value, separated by ','.
com.arsdigita.cms.contenttypes.scidepartment.summarytab.status.active.example = former,formerHead
com.arsdigita.cms.contenttypes.scidepartment.summarytab.status.active.format = [String]
com.arsdigita.cms.contenttypes.scidepartment.summarytab.contacts.show.title = Show contact?
com.arsdigita.cms.contenttypes.scidepartment.summarytab.contacts.show.purpose = Show contact?