Example usage for com.liferay.portal.kernel.json JSONObject length

List of usage examples for com.liferay.portal.kernel.json JSONObject length

Introduction

In this page you can find the example usage for com.liferay.portal.kernel.json JSONObject length.

Prototype

public int length();

Source Link

Usage

From source file:com.liferay.adaptive.media.image.internal.util.AMImageSerializerImplTest.java

License:Open Source License

@Test
public void testSerializeAdaptiveMediaWithEmptyAttributes() throws Exception {

    Map<String, String> properties = new HashMap<>();

    AdaptiveMedia<AMImageProcessor> adaptiveMedia = new AMImage(() -> null,
            AMImageAttributeMapping.fromProperties(properties), new URI("http://localhost"));

    AMImageSerializer amImageSerializer = new AMImageSerializerImpl();

    String serialize = amImageSerializer.serialize(adaptiveMedia);

    JSONObject jsonObject = JSONFactoryUtil.createJSONObject(serialize);

    JSONObject attributesJSONObject = jsonObject.getJSONObject("attributes");

    Assert.assertEquals(0, attributesJSONObject.length());
}

From source file:com.liferay.asset.categories.admin.web.internal.exportimport.data.handler.AssetVocabularyStagedModelDataHandler.java

License:Open Source License

protected String getImportSettings(PortletDataContext portletDataContext, AssetVocabulary vocabulary)
        throws PortalException {

    Element vocabularyElement = portletDataContext.getImportDataElement(vocabulary);

    JSONObject settingsMetadataJSONObject = getImportSettingsMetadataJSONObject(portletDataContext,
            vocabularyElement);/*w ww  .j  a va2s  . com*/

    if (settingsMetadataJSONObject.length() == 0) {
        return vocabulary.getSettings();
    }

    long groupId = portletDataContext.getScopeGroupId();

    long[] groupIds = { portletDataContext.getCompanyGroupId(), groupId };

    Locale locale = _portal.getSiteDefaultLocale(groupId);

    AssetVocabularySettingsImportHelper assetVocabularySettingsImportHelper = new AssetVocabularySettingsImportHelper(
            vocabulary.getSettings(), _classNameLocalService, groupIds, locale, settingsMetadataJSONObject);

    return assetVocabularySettingsImportHelper.getSettings();
}

From source file:com.liferay.dynamic.data.mapping.type.document.library.internal.DocumentLibraryDDMFormFieldTemplateContextContributor.java

License:Open Source License

@Override
public Map<String, Object> getParameters(DDMFormField ddmFormField,
        DDMFormFieldRenderingContext ddmFormFieldRenderingContext) {

    Map<String, Object> parameters = new HashMap<>();

    HttpServletRequest request = ddmFormFieldRenderingContext.getHttpServletRequest();

    if (ddmFormFieldRenderingContext.isReadOnly()
            && Validator.isNotNull(ddmFormFieldRenderingContext.getValue())) {

        JSONObject valueJSONObject = getValueJSONObject(ddmFormFieldRenderingContext.getValue());

        if ((valueJSONObject != null) && (valueJSONObject.length() > 0)) {
            parameters.put("fileEntryTitle", valueJSONObject.get("title"));
            parameters.put("fileEntryURL", getFileEntryURL(request, valueJSONObject));
        }// w  ww . jav a 2s  .  c om
    }

    parameters.put("groupId", ddmFormFieldRenderingContext.getProperty("groupId"));
    parameters.put("lexiconIconsPath", getLexiconIconsPath(request));

    Map<String, String> stringsMap = new HashMap<>();

    ResourceBundle resourceBundle = getResourceBundle(ddmFormFieldRenderingContext.getLocale());

    stringsMap.put("select", LanguageUtil.get(resourceBundle, "select"));

    parameters.put("strings", stringsMap);
    parameters.put("value", jsonFactory.looseDeserialize(ddmFormFieldRenderingContext.getValue()));

    return parameters;
}

From source file:com.liferay.dynamic.data.mapping.type.document.library.internal.DocumentLibraryDDMFormFieldValueAccessor.java

License:Open Source License

@Override
public boolean isEmpty(DDMFormFieldValue ddmFormFieldValue, Locale locale) {
    JSONObject valueJSONObject = getValue(ddmFormFieldValue, locale);

    if (valueJSONObject.length() == 0) {
        return true;
    }/*ww  w. java2  s  .c  om*/

    return false;
}

From source file:com.liferay.dynamic.data.mapping.type.grid.internal.GridDDMFormFieldValueRenderer.java

License:Open Source License

@Override
public String render(DDMFormFieldValue ddmFormFieldValue, Locale locale) {
    JSONObject valuesJSONObject = gridDDMFormFieldValueAccessor.getValue(ddmFormFieldValue, locale);

    if (valuesJSONObject.length() == 0) {
        return StringPool.BLANK;
    }/*from w  w  w.j a v  a2 s  . com*/

    DDMFormFieldOptions rows = getDDMFormFieldOptions(ddmFormFieldValue, "rows");
    DDMFormFieldOptions columns = getDDMFormFieldOptions(ddmFormFieldValue, "columns");

    StringBundler sb = new StringBundler(valuesJSONObject.length() * 5);

    Set<String> rowOptions = rows.getOptionsValues();

    for (String rowOption : rowOptions) {
        if (valuesJSONObject.has(rowOption)) {
            String columnOption = valuesJSONObject.getString(rowOption);

            LocalizedValue rowLabel = rows.getOptionLabels(rowOption);
            LocalizedValue columnLabel = columns.getOptionLabels(columnOption);

            sb.append(getLabel(rowLabel, rowOption, locale));

            sb.append(StringPool.COLON);
            sb.append(StringPool.SPACE);

            sb.append(getLabel(columnLabel, columnOption, locale));

            sb.append(StringPool.COMMA_AND_SPACE);
        }
    }

    if (sb.index() > 0) {
        sb.setIndex(sb.index() - 1);
    }

    return sb.toString();
}

From source file:com.liferay.exportimport.resources.importer.internal.util.FileSystemImporter.java

License:Open Source License

protected void addLayoutColumnPortlet(Layout layout, String columnId, JSONObject portletJSONObject)
        throws Exception {

    LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType();

    String rootPortletId = portletJSONObject.getString("portletId");

    if (Validator.isNull(rootPortletId)) {
        throw new ImporterException("portletId is not specified");
    }/*from   w  w  w  .  j  av  a 2  s  . com*/

    PortletPreferencesTranslator portletPreferencesTranslator = portletPreferencesTranslators
            .get(rootPortletId);

    String portletId = layoutTypePortlet.addPortletId(userId, rootPortletId, columnId, -1, false);

    if (portletId == null) {
        return;
    }

    JSONObject portletPreferencesJSONObject = portletJSONObject.getJSONObject("portletPreferences");

    if ((portletPreferencesJSONObject == null) || (portletPreferencesJSONObject.length() == 0)) {

        return;
    }

    if (portletPreferencesTranslator != null) {
        PortletPreferencesIds portletPreferencesIds = PortletPreferencesFactoryUtil
                .getPortletPreferencesIds(layout.getGroupId(), 0, layout, portletId, false);

        PortletPreferences portletSetup = PortletPreferencesLocalServiceUtil
                .getPreferences(portletPreferencesIds);

        Iterator<String> iterator = portletPreferencesJSONObject.keys();

        while (iterator.hasNext()) {
            String key = iterator.next();

            portletPreferencesTranslator.translate(portletPreferencesJSONObject, key, portletSetup);
        }

        portletSetup.store();
    }

    if (rootPortletId.equals(PortletKeys.NESTED_PORTLETS)) {
        JSONArray columnsJSONArray = portletPreferencesJSONObject.getJSONArray("columns");

        StringBundler sb = new StringBundler(4);

        sb.append(StringPool.UNDERLINE);
        sb.append(portletId);
        sb.append(StringPool.DOUBLE_UNDERLINE);
        sb.append(LayoutTypePortletConstants.COLUMN_PREFIX);

        addLayoutColumns(layout, sb.toString(), columnsJSONArray);
    }
}

From source file:com.liferay.lms.service.impl.LearningActivityResultLocalServiceImpl.java

License:Open Source License

public LearningActivityResult update(long latId, String tryResultData, String imsmanifest, long userId)
        throws SystemException, PortalException {
    LearningActivityTry learningActivityTry = learningActivityTryLocalService.getLearningActivityTry(latId);
    if (userId != learningActivityTry.getUserId()) {
        throw new PortalException();
    }// w  ww . j ava 2 s  .  c  o  m

    LearningActivity learningActivity = learningActivityLocalService
            .getLearningActivity(learningActivityTry.getActId());
    boolean completedAsPassed = GetterUtil.getBoolean(LearningActivityLocalServiceUtil
            .getExtraContentValue(learningActivityTry.getActId(), "completedAsPassed"), false);
    long passPuntuation = learningActivity.getPasspuntuation();
    List<String> manifestItems = new ArrayList<String>();
    Map<String, String> recursos = new HashMap<String, String>();

    Map<String, String> manifestResources = new HashMap<String, String>();
    boolean isPureAsset = false;
    long scos = 0;
    long assets = 0;

    try {
        if (Validator.isNotNull(imsmanifest)) {
            Document imsdocument = SAXReaderUtil.read(imsmanifest);
            List<Element> resources = new ArrayList<Element>();
            resources = imsdocument.getRootElement().element("resources").elements("resource");
            isPureAsset = true;
            for (Element resource : resources) {
                String identifier = resource.attributeValue("identifier");
                String type = resource.attributeValue("scormType");
                String type2 = resource.attributeValue("scormtype");
                String type3 = type != null ? type : type2 != null ? type2 : "asset";
                if (!"asset".equalsIgnoreCase(type3)) {
                    isPureAsset = false;
                    scos++;
                } else {
                    assets++;
                }
                manifestResources.put(identifier, type3);
            }
            List<Element> items = new ArrayList<Element>();
            items.addAll(imsdocument.getRootElement().element("organizations").elements("organization").get(0)
                    .elements("item"));
            for (int i = 0; i < items.size(); i++) {
                Element item = items.get(i);
                String identifier = item.attributeValue("identifier");
                String identifierref = item.attributeValue("identifierref");
                if (identifier != null && !"".equals(identifier) && identifierref != null
                        && !"".equals(identifierref)) {
                    manifestItems.add(identifier);
                    recursos.put(identifier, identifierref);
                }
                items.addAll(item.elements("item"));
            }
        }
    } catch (DocumentException e) {
    } catch (Exception e) {
        e.printStackTrace();
    }

    Long master_score = new Integer(learningActivity.getPasspuntuation()).longValue();

    JSONObject scorm = JSONFactoryUtil.createJSONObject();
    scorm = JSONFactoryUtil.createJSONObject(tryResultData);

    JSONObject organizations = scorm.getJSONObject("organizations");
    JSONArray organizationNames = organizations.names();
    JSONObject organization = organizations.getJSONObject(organizationNames.getString(0));

    JSONObject cmis = organization.getJSONObject("cmi");
    JSONArray cmiNames = cmis.names();

    List<String> completion_statuses = new ArrayList<String>();
    List<String> success_statuses = new ArrayList<String>();
    List<Long> scores = new ArrayList<Long>();

    String total_completion_status = "not attempted";
    String total_lesson_status = "";
    Double total_score = 0.0;

    if (cmis.length() == 0) { // Asset
        if (isPureAsset) {
            for (int i = 0; i < manifestItems.size(); i++) {
                completion_statuses.add("completed");
                success_statuses.add("passed");
                scores.add(new Long(100));
            }
            total_completion_status = "completed";
            total_lesson_status = "passed";
        } else {
            throw new PortalException();
        }
    } else {
        for (int i = 0; i < assets; i++) {
            completion_statuses.add("completed");
            success_statuses.add("passed");
            //scores.add(new Long(100));
        }
        for (int i = 0; i < cmiNames.length(); i++) {
            JSONObject cmi = cmis.getJSONObject(cmiNames.getString(i));
            String typeCmi = manifestResources.get(recursos.get(cmiNames.getString(i)));

            String completion_status = null;
            String success_status = null;
            Double max_score = null;
            Double min_score = null;
            Double raw_score = null;
            Double scaled_score = null;
            Long scaled_score_long = null;
            String suspend_data = cmi.getJSONObject("cmi.suspend_data").getString("value");

            if (cmi.getJSONObject("cmi.core.lesson_status") != null) { // 1.2
                String lesson_status = cmi.getJSONObject("cmi.core.lesson_status").getString("value");
                //"passed", "completed", "failed", "incomplete", "browsed", "not attempted"
                if ("passed".equals(lesson_status)) {
                    success_status = "passed";
                    completion_status = "completed";
                } else if ("failed".equals(lesson_status)) {
                    success_status = "failed";
                    completion_status = "completed";
                } else if ("completed".equals(lesson_status)) {
                    if (completedAsPassed) {
                        success_status = "passed"; // or passed
                    } else {
                        success_status = "unknown";
                    }
                    completion_status = "completed";
                } else if ("browsed".equals(lesson_status)) {
                    success_status = "passed";
                    completion_status = "completed";
                } else if ("incomplete".equals(lesson_status)) {
                    success_status = "unknown";
                    completion_status = "incomplete";
                } else if ("not attempted".equals(lesson_status)) {
                    success_status = "unknown";
                    completion_status = "not attempted";
                    if (suspend_data.contains("1")) {
                        completion_status = "completed";
                        if (suspend_data.contains("0")) {
                            completion_status = "incomplete";
                        }
                        tryResultData.replaceAll("\"not attempted\"", "\"" + completion_status + "\"");
                    }
                }
                max_score = cmi.getJSONObject("cmi.core.score.max").getDouble("value", 100);
                min_score = cmi.getJSONObject("cmi.core.score.min").getDouble("value", 0);
                raw_score = cmi.getJSONObject("cmi.core.score.raw").getDouble("value",
                        "asset".equals(typeCmi) ? max_score : 0);
                if ("passed".equals(success_status) && raw_score == 0 && completedAsPassed) {
                    raw_score = (double) passPuntuation;
                }
                scaled_score = new Double(Math.round((raw_score * 100) / (max_score - min_score)));
                scaled_score_long = Math.round(scaled_score);
            } else { // 1.3
                //"completed", "incomplete", "not attempted", "unknown"
                completion_status = cmi.getJSONObject("cmi.completion_status").getString("value");
                if ("completed".equals(completion_status)) {
                    if (completedAsPassed) {
                        success_status = "passed"; // or passed
                    } else {
                        success_status = cmi.getJSONObject("cmi.success_status").getString("value");
                    }
                } else {
                    success_status = cmi.getJSONObject("cmi.success_status").getString("value");
                }
                //"passed", "failed", "unknown"

                max_score = cmi.getJSONObject("cmi.score.max").getDouble("value", 100);
                min_score = cmi.getJSONObject("cmi.score.min").getDouble("value", 0);
                raw_score = cmi.getJSONObject("cmi.score.raw").getDouble("value",
                        "asset".equals(typeCmi) ? 100 : 0);
                if ("passed".equals(success_status) && raw_score == 0 && completedAsPassed) {
                    raw_score = (double) passPuntuation;
                }
                scaled_score = new Double(Math.round((raw_score * 100) / (max_score - min_score)));
                scaled_score = cmi.getJSONObject("cmi.score.scaled").getDouble("value", -1) != -1
                        ? (cmi.getJSONObject("cmi.score.scaled").getDouble("value") * (max_score - min_score)
                                + min_score)
                        : scaled_score;
                scaled_score_long = Math.round(scaled_score);
            }
            completion_statuses.add(completion_status);
            success_statuses.add(success_status);
            scores.add(scaled_score_long);
        }
    }

    if (!isPureAsset) {
        if (manifestItems.size() <= 1) {
            if (completion_statuses.size() == 1) {
                total_completion_status = completion_statuses.get(0);
            }
            if (success_statuses.size() == 1) {
                total_lesson_status = success_statuses.get(0);
            }
        } else {
            if (success_statuses.size() < manifestItems.size()) {
                total_lesson_status = "unknown";
            } else if (success_statuses.size() == manifestItems.size()) {
                for (int i = 0; i < success_statuses.size(); i++) {
                    if ("unknown".equals(success_statuses.get(i))) {
                        total_lesson_status = "unknown";
                        break;
                    }
                    if ("passed".equals(success_statuses.get(i))) {
                        if ("passed".equals(total_lesson_status) || "".equals(total_lesson_status)) {
                            total_lesson_status = "passed";
                        }
                        if ("failed".equals(total_lesson_status)) {
                            total_lesson_status = "unknown";
                            break;
                        }
                    }
                    if ("failed".equals(success_statuses.get(i))) {
                        if ("passed".equals(total_lesson_status)) {
                            total_lesson_status = "unknown";
                            break;
                        }
                        if ("failed".equals(total_lesson_status)) {
                            total_lesson_status = "failed";
                        }
                    }
                }
            }
            if (completion_statuses.size() < manifestItems.size()) {
                if (completion_statuses.size() <= 1) {
                    total_completion_status = completion_statuses.get(0).equals("completed") ? "incomplete"
                            : completion_statuses.get(0);
                } else {
                    total_completion_status = "incomplete";
                }
            } else if (completion_statuses.size() == manifestItems.size()) {
                for (int i = 0; i < completion_statuses.size(); i++) {
                    //total_score += scores.get(i);
                    if ("incomplete".equals(completion_statuses.get(i))) {
                        total_completion_status = "incomplete";
                        break;
                    }
                    if ("completed".equals(completion_statuses.get(i))) {
                        if ("not attempted".equals(total_completion_status)) {
                            total_completion_status = "completed";
                        }
                        if ("unknown".equals(total_completion_status)) {
                            total_completion_status = "incomplete";
                            break;
                        }
                    }
                    if ("not attempted".equals(completion_statuses.get(i))) {
                        if ("completed".equals(total_completion_status)) {
                            total_completion_status = "incomplete";
                            break;
                        }
                        if ("unknown".equals(total_completion_status)) {
                            total_completion_status = "unknown";
                        }
                    }
                    if ("unknown".equals(completion_statuses.get(i))) {
                        if ("completed".equals(total_completion_status)) {
                            total_completion_status = "incomplete";
                            break;
                        }
                        if ("unknown".equals(total_completion_status)
                                || "not attempted".equals(total_completion_status)) {
                            total_completion_status = "unknown";
                        }
                    }
                }
            }
        }
    }

    for (int i = 0; i < scores.size(); i++) {
        total_score += scores.get(i);
    }
    if (scos > 0) {
        total_score = total_score / (scos);
    } else {
        total_score = total_score / ((scos + assets) > 0 ? (scos + assets) : 1);
    }
    if ("incomplete".equals(total_completion_status) || "completed".equals(total_completion_status)) {
        learningActivityTry.setTryResultData(tryResultData);
        learningActivityTry.setResult(Math.round(total_score));
        if (Math.round(total_score) >= master_score) {
            total_lesson_status = "passed";
        }
        learningActivityTryLocalService.updateLearningActivityTry(learningActivityTry);

        // If SCO says that the activity has been passed, then the learning activity result has to be marked as passed
        if ("passed".equals(total_lesson_status)) {
            LearningActivityResult laresult = learningActivityResultLocalService
                    .getByActIdAndUserId(learningActivityTry.getActId(), userId);
            if (!laresult.getPassed()) {
                laresult.setPassed(true);
                laresult.setEndDate(new Date(System.currentTimeMillis()));
                learningActivityResultLocalService.updateLearningActivityResult(laresult);
                if (laresult.getPassed()) {
                    moduleResultLocalService.update(laresult);
                }
            }
        }
        // If SCO says that the activity has been failed, then the learning activity result has to be marked as failed

        if ("failed".equals(total_lesson_status)) {
            LearningActivityResult laresult = learningActivityResultLocalService
                    .getByActIdAndUserId(learningActivityTry.getActId(), userId);
            if (laresult.getEndDate() == null) {
                laresult.setPassed(false);
                laresult.setEndDate(new Date(System.currentTimeMillis()));
                learningActivityResultLocalService.updateLearningActivityResult(laresult);
                moduleResultLocalService.update(laresult);

            }
        }

    }

    //auditing
    if (learningActivity != null) {
        AuditingLogFactory.audit(learningActivity.getCompanyId(), learningActivity.getGroupId(),
                LearningActivityResult.class.getName(), learningActivity.getPrimaryKey(),
                learningActivity.getUserId(), AuditConstants.UPDATE, null);
    }

    return this.getByActIdAndUserId(learningActivityTry.getActId(), userId);
}

From source file:com.liferay.osb.scv.connector.internal.jsonws.SCVUserJSONWS.java

License:Open Source License

public JSONObject getFields() throws Exception {
    JSONObject fieldsJSONObject = JSONFactoryUtil.createJSONObject();

    for (Class<?> clazz : _modelClasses.values()) {
        JSONObject modelFieldsJSONObject = getFields(clazz);

        if (modelFieldsJSONObject.length() == 0) {
            continue;
        }/* w  w  w  . ja  v a  2s  . co m*/

        fieldsJSONObject.put(clazz.getSimpleName(), modelFieldsJSONObject);
    }

    return fieldsJSONObject;
}

From source file:com.liferay.osb.scv.user.mapper.internal.event.UpdateUsersEvent.java

License:Open Source License

public void handleResponse(Message message) throws Exception {
    if (_userMappingRulesMap.isEmpty()) {
        return;//from   w  w w.ja  v  a 2s .  c  om
    }

    MappingDataSource mappingDataSource = MappingDataSourceLocalServiceUtil
            .fetchMappingDataSource(_mappingDataSourceId);

    JSONObject sourceJSONObject = JSONFactoryUtil.createJSONObject(String.valueOf(message.getPayload()));

    JSONObject destinationJSONObject = JSONFactoryUtil.createJSONObject();

    Iterator<String> keys = sourceJSONObject.keys();

    while (keys.hasNext()) {
        String key = keys.next();

        List<UserMappingRule> userMappingRules = _userMappingRulesMap.get(key);

        if (ListUtil.isNotNull(userMappingRules)) {
            Set<String> processedKeys = new HashSet<>();

            JSONArray sourceModelJSONArray = sourceJSONObject.getJSONArray(key);

            JSONArray destinationModelJSONArray = JSONFactoryUtil.createJSONArray();

            for (int i = 0; i < sourceModelJSONArray.length(); i++) {
                JSONObject sourceModelJSONObject = sourceModelJSONArray.getJSONObject(i);
                JSONObject destinationModelJSONObject = JSONFactoryUtil.createJSONObject();

                for (UserMappingRule userMappingRule : userMappingRules) {
                    processedKeys.add(userMappingRule.getSourceField());

                    String value = sourceModelJSONObject.getString(userMappingRule.getSourceField());

                    if ((value != null) && !_override) {
                        destinationModelJSONObject.put(userMappingRule.getDestinationField(), value);
                    }
                }

                Iterator<String> allKeys = sourceModelJSONObject.keys();

                while (allKeys.hasNext()) {
                    String curKey = allKeys.next();

                    if (processedKeys.contains(curKey)) {
                        continue;
                    }

                    destinationModelJSONObject.put(curKey, sourceModelJSONObject.getString(curKey));
                }

                destinationModelJSONArray.put(destinationModelJSONObject);
            }

            destinationJSONObject.put(key, destinationModelJSONArray);
        }
    }

    if (destinationJSONObject.length() == 0) {
        return;
    }

    JSONArray sourceUserJSONArray = sourceJSONObject.getJSONArray("User");

    if ((mappingDataSource.getType() != MappingDataSourceConstants.CUSTOM)
            && !_userMappingRulesMap.containsKey("User") && (sourceUserJSONArray != null)) {

        JSONArray destinationUserJSONArray = JSONFactoryUtil.createJSONArray();

        for (int i = 0; i < sourceUserJSONArray.length(); i++) {
            JSONObject sourceUserJSONObject = sourceUserJSONArray.getJSONObject(i);
            JSONObject destinationUserJSONObject = JSONFactoryUtil.createJSONObject();

            keys = sourceUserJSONObject.keys();

            while (keys.hasNext()) {
                String key = keys.next();

                destinationUserJSONObject.put(key, sourceUserJSONObject.getString(key));
            }

            destinationUserJSONArray.put(destinationUserJSONObject);
        }

        destinationJSONObject.put("User", destinationUserJSONArray);
    }

    // START: TEMP CODE //

    Map<String, List<String>> map = new HashMap<>();

    map.put("User", Arrays.asList("emailAddress"));

    // END: TEMP CODE //

    UserProfileUtil.updateDataSourceEntries(_mappingDataSourceId, map, destinationJSONObject);
}

From source file:com.liferay.osb.scv.user.mapper.service.impl.UserMappingRuleLocalServiceImpl.java

License:Open Source License

@Override
public UserMappingRule addUserMappingRule(long companyId, long userId, long mappingDataSourceId,
        String modelName, long fieldSetId, String sourceField, String destinationField, int frequency,
        boolean required) throws PortalException {

    long userMappingRuleId = counterLocalService.increment();

    UserMappingRule userMappingRule = userMappingRulePersistence.create(userMappingRuleId);

    userMappingRule.setCompanyId(companyId);
    userMappingRule.setUserId(userId);//from w w w  . j  a  v  a  2  s .  com
    userMappingRule.setCreateDate(new Date());
    userMappingRule.setMappingDataSourceId(mappingDataSourceId);
    userMappingRule.setFieldSetId(fieldSetId);
    userMappingRule.setModelName(modelName);
    userMappingRule.setSourceField(sourceField);
    userMappingRule.setDestinationField(destinationField);
    userMappingRule.setRequired(required);

    MappingDataSource mappingDataSource = mappingDataSourceLocalService
            .fetchMappingDataSource(mappingDataSourceId);

    JSONObject fieldsJSONObject = JSONFactoryUtil.createJSONObject(mappingDataSource.getAvailableFields());

    // START TEMP FIX

    if (fieldsJSONObject.length() == 0) {
        userMappingRule.setFieldType("String");
    } else {

        // END TEMP FIX

        JSONObject modelFieldsJSONObject = fieldsJSONObject.getJSONObject(modelName);

        userMappingRule.setFieldType(modelFieldsJSONObject.getString(sourceField));
    }

    userMappingRule.setFrequency(frequency);

    userMappingRulePersistence.update(userMappingRule);

    List<UserMappingRule> userMappingRules = new ArrayList<>();

    userMappingRules.add(userMappingRule);

    if (mappingDataSource.getType() == MappingDataSourceConstants.CUSTOM) {
        return userMappingRule;
    }

    Event updateUsersEvent = new UpdateUsersEvent(mappingDataSourceId, userMappingRules);

    updateUsersEvent.run();

    return userMappingRule;
}