/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.jaxb.model.record_rc4; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.xml.bind.annotation.XmlEnumValue; public enum WorkCategory { @XmlEnumValue("publication") PUBLICATION("publication", WorkType.BOOK_CHAPTER, WorkType.BOOK_REVIEW, WorkType.BOOK, WorkType.DICTIONARY_ENTRY, WorkType.DISSERTATION, WorkType.EDITED_BOOK, WorkType.ENCYCLOPEDIA_ENTRY, WorkType.JOURNAL_ARTICLE, WorkType.JOURNAL_ISSUE, WorkType.MAGAZINE_ARTICLE, WorkType.MANUAL, WorkType.NEWSLETTER_ARTICLE, WorkType.NEWSPAPER_ARTICLE, WorkType.ONLINE_RESOURCE, WorkType.REPORT, WorkType.RESEARCH_TOOL, WorkType.SUPERVISED_STUDENT_PUBLICATION, WorkType.TEST, WorkType.TRANSLATION, WorkType.WEBSITE, WorkType.WORKING_PAPER), @XmlEnumValue("conference") CONFERENCE("conference", WorkType.CONFERENCE_ABSTRACT, WorkType.CONFERENCE_PAPER, WorkType.CONFERENCE_POSTER), @XmlEnumValue("intellectual_property") INTELLECTUAL_PROPERTY("intellectual_property", WorkType.DISCLOSURE, WorkType.LICENSE, WorkType.PATENT, WorkType.REGISTERED_COPYRIGHT), @XmlEnumValue("other_output") OTHER_OUTPUT("other_output", WorkType.ARTISTIC_PERFORMANCE, WorkType.DATA_SET, WorkType.INVENTION, WorkType.LECTURE_SPEECH, WorkType.OTHER, WorkType.RESEARCH_TECHNIQUE, WorkType.SPIN_OFF_COMPANY, WorkType.STANDARDS_AND_POLICY, WorkType.TECHNICAL_STANDARD, WorkType.UNDEFINED); private List<WorkType> types = new ArrayList<WorkType>(); private String value; private WorkCategory(String value, WorkType... types) { this.value = value; for (WorkType subType : types) { this.types.add(subType); } } public String value() { return value; } public List<WorkType> getSubTypes() { return Collections.unmodifiableList(types); } public static WorkCategory fromValue(String v) { for (WorkCategory c : WorkCategory.values()) { if (c.value.equals(v)) { return c; } } throw new IllegalArgumentException(v); } public static WorkCategory fromWorkType(WorkType type) { if (PUBLICATION.getSubTypes().contains(type)) return PUBLICATION; else if (CONFERENCE.getSubTypes().contains(type)) return CONFERENCE; else if (INTELLECTUAL_PROPERTY.getSubTypes().contains(type)) return INTELLECTUAL_PROPERTY; else if (OTHER_OUTPUT.getSubTypes().contains(type)) return OTHER_OUTPUT; else throw new IllegalArgumentException("Invalid work type provided: " + type.name()); } }