+ private Node importDefaultOrgFile(InputStream in) throws IOException {
+ // TODO make this configurable
+ int displayNameIndex = 0;
+ int legalNameIndex = 1;
+ int legalFormIndex = 2;
+ int urlsIndex = 3;
+ int streetIndex = 4;
+ int postalCodeIndex = 5;
+ int lIndex = 6;
+ int stIndex = 7;
+ int cIndex = 8;
+ int mobileIndex = 9;
+ int telephoneNumberIndex = 10;
+ int mailIndex = 11;
+ int contactsIndex = 12;
+ int descriptionIndex = 13;
+ int tagsIndex = 14;
+
+ Session session = null;
+ int i = 0;
+ try {
+ Workbook wb = JxlUtils.toWorkbook(in, IMPORT_ENCODING);
+ session = repository.login();
+ String basePath = "/" + peopleService.getBaseRelPath(PeopleTypes.PEOPLE_ORG);
+ Node targetParent = session.getNode(basePath);
+ Sheet sheet = wb.getSheet(0);
+
+ Node tmpParent = peopleService.getDraftParent(session);
+
+ int rowNb = sheet.getRows();
+ for (i = 1; i < rowNb - 1; i++) {
+
+ Node tmpOrg = createDraftNode(tmpParent, PeopleTypes.PEOPLE_ORG);
+
+ String dName = JxlUtils.getStringValue(sheet, displayNameIndex, i);
+ if (notEmpty(dName))
+ tmpOrg.setProperty(PeopleNames.PEOPLE_DISPLAY_NAME, dName);
+ String lName = getStringValue(sheet, legalNameIndex, i);
+ if (notEmpty(lName))
+ tmpOrg.setProperty(PeopleNames.PEOPLE_LEGAL_NAME, lName);
+ String lForm = getStringValue(sheet, legalFormIndex, i);
+ if (notEmpty(lForm))
+ tmpOrg.setProperty(PeopleNames.PEOPLE_LEGAL_FORM, lForm);
+ String urlStr = getStringValue(sheet, urlsIndex, i);
+ if (notEmpty(urlStr))
+ importUrls(tmpOrg, urlStr);
+ String mailStr = getStringValue(sheet, mailIndex, i);
+ if (notEmpty(mailStr))
+ importMails(tmpOrg, mailStr);
+ String streetStr = getStringValue(sheet, streetIndex, i);
+ String pcStr = getStringValue(sheet, postalCodeIndex, i);
+ String lStr = getStringValue(sheet, lIndex, i);
+ String stStr = getStringValue(sheet, stIndex, i);
+ String cStr = getStringValue(sheet, cIndex, i);
+ if (notEmpty(streetStr) || notEmpty(pcStr) || notEmpty(lStr) || notEmpty(stStr) || notEmpty(cStr))
+ PeopleJcrUtils.createAddress(resourcesService, peopleService, tmpOrg, streetStr, null, pcStr, lStr,
+ stStr, cStr, true, ContactValueCatalogs.CONTACT_CAT_MAIN, null);
+ String mobileStr = getStringValue(sheet, mobileIndex, i);
+ if (notEmpty(mobileStr))
+ PeopleJcrUtils.createPhone(resourcesService, peopleService, tmpOrg, mobileStr, true, null, null);
+ String phoneStr = getStringValue(sheet, telephoneNumberIndex, i);
+ if (notEmpty(phoneStr))
+ PeopleJcrUtils.createPhone(resourcesService, peopleService, tmpOrg, phoneStr, true,
+ ContactValueCatalogs.CONTACT_CAT_DIRECT, null);
+ String descStr = getStringValue(sheet, descriptionIndex, i);
+ if (notEmpty(descStr))
+ tmpOrg.setProperty(Property.JCR_DESCRIPTION, descStr);
+ String tagsStr = getStringValue(sheet, tagsIndex, i);
+ if (notEmpty(tagsStr))
+ tmpOrg.setProperty(ResourcesNames.CONNECT_TAGS, ConnectJcrUtils.parseAndClean(tagsStr, ",", true));
+
+ Node newOrgNode = peopleService.publishEntity(targetParent, PeopleTypes.PEOPLE_ORG, tmpOrg);
+ // Save the newly created entity without creating a base version
+ newOrgNode = peopleService.saveEntity(newOrgNode, false);
+
+ String contactsStr = getStringValue(sheet, contactsIndex, i);
+ if (notEmpty(contactsStr))
+ importOrgEmployees(tmpParent, targetParent, newOrgNode, contactsStr);
+ }
+
+ // Refresh tags and mailing list
+ Node tagParent = resourcesService.getTagLikeResourceParent(session, ConnectConstants.RESOURCE_TAG);
+ resourcesService.refreshKnownTags(tagParent);
+
+ // Create Mailing lists
+ Node mlParent = resourcesService.getTagLikeResourceParent(session, PeopleTypes.PEOPLE_MAILING_LIST);
+ resourcesService.refreshKnownTags(mlParent);
+
+ } catch (PeopleException | RepositoryException e) {
+ throw new SuiteWorkbenchException("Cannot import mapping file, error at line: " + (i + 1), e);
+ } finally {
+ JcrUtils.logoutQuietly(session);
+ }
+
+ return null;
+ }
+
+ private Map<String, Integer> initialiseHeaders(Sheet sheet, List<String> validHeaders) {
+ Map<String, Integer> headers = new HashMap<>();
+ int length = sheet.getColumns();
+ for (int i = 0; i < length; i++) {
+ String value = JxlUtils.getStringValue(sheet, i, 0);
+ if (validHeaders.contains(value))
+ headers.put(value, i);
+ else
+ log.warn(value + " (column [" + i + "]) is not a valid header");
+ }
+ return headers;
+ }
+
+ private Node importDefaultPersonFile(InputStream in) throws IOException {
+ // Local shortcut
+ String JCR_DESC = ConnectJcrUtils.getLocalJcrItemName(Property.JCR_DESCRIPTION);
+
+ // Map<String, Integer> headers = new HashMap<>();
+ // headers.put(PeopleNames.PEOPLE_FIRST_NAME, 0);
+ // headers.put(PEOPLE_LAST_NAME, 1);
+ // headers.put(PEOPLE_SALUTATION, 2);
+ // headers.put(PEOPLE_HONORIFIC_TITLE, 3);
+ // headers.put(PEOPLE_NICKNAME, 4);
+ // headers.put(PEOPLE_NAME_SUFFIX, 5);
+ // headers.put(PEOPLE_MAIDEN_NAME, 6);
+ // headers.put(PEOPLE_PMOBILE, 7);
+ // headers.put(PEOPLE_PTELEPHONE_NUMBER, 8);
+ // headers.put(PEOPLE_SPOKEN_LANGUAGES, 9);
+ // headers.put(ResourcesNames.CONNECT_TAGS, 10);
+ // headers.put(PEOPLE_MAILING_LISTS, 11);
+ // headers.put(PEOPLE_BIRTH_DATE, 12);
+ // headers.put(PEOPLE_PMAIL, 13);
+ // headers.put("people:emailAddressOther", 14);
+ // headers.put("people:org", 15);
+ // headers.put(PEOPLE_ROLE, 16);
+ // headers.put(PEOPLE_DEPARTMENT, 17);
+ // headers.put("people:facebook", 18);
+ // headers.put(JCR_DESC, 19);
+ // headers.put(ActivitiesNames.ACTIVITIES_FROM_IP, 20);
+
+ List<String> validHeaders = Arrays.asList(PeopleNames.PEOPLE_FIRST_NAME, PEOPLE_LAST_NAME, PEOPLE_SALUTATION,
+ PEOPLE_HONORIFIC_TITLE, PEOPLE_NICKNAME, PEOPLE_NAME_SUFFIX, PEOPLE_MAIDEN_NAME, PEOPLE_PMOBILE,
+ PEOPLE_PTELEPHONE_NUMBER, PEOPLE_SPOKEN_LANGUAGES, ResourcesNames.CONNECT_TAGS, PEOPLE_MAILING_LISTS,
+ PEOPLE_BIRTH_DATE, PEOPLE_PMAIL, "people:emailAddressOther", "people:org", PEOPLE_ROLE,
+ PEOPLE_DEPARTMENT, "people:facebook", JCR_DESC, ActivitiesNames.ACTIVITIES_FROM_IP, PEOPLE_STREET,
+ PEOPLE_ZIP_CODE, PEOPLE_CITY, PEOPLE_STATE, PEOPLE_COUNTRY);
+
+ String[] basicInfo = { PEOPLE_FIRST_NAME, PEOPLE_LAST_NAME, PEOPLE_SALUTATION, PEOPLE_HONORIFIC_TITLE,
+ PEOPLE_NICKNAME, PEOPLE_NAME_SUFFIX, PEOPLE_MAIDEN_NAME, PEOPLE_BIRTH_DATE, JCR_DESC };
+
+ Map<String, String> primaryContacts = new HashMap<>();
+ primaryContacts.put(PEOPLE_PMOBILE, PeopleTypes.PEOPLE_MOBILE);
+ primaryContacts.put(PEOPLE_PTELEPHONE_NUMBER, PeopleTypes.PEOPLE_TELEPHONE_NUMBER);
+ primaryContacts.put(PEOPLE_PURL, PeopleTypes.PEOPLE_URL);
+ primaryContacts.put(PEOPLE_PMAIL, PeopleTypes.PEOPLE_MAIL);
+
+ String[] multiProps = { PEOPLE_SPOKEN_LANGUAGES, ResourcesNames.CONNECT_TAGS, PEOPLE_MAILING_LISTS, };
+
+ Session session = null;
+ int i = 0;