diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main')
7 files changed, 279 insertions, 205 deletions
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java index 7029ded38d..68365fd857 100644 --- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java +++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java @@ -23,185 +23,212 @@ package org.openecomp.sdc.logging.api; /** * <a>Factory to hide a concrete, framework-specific implementation of logger creation.</a> - * - * <p>The service used by this factory must implement {@link LoggerCreationService}. If no implementation has been - * configured or could not be instantiated, a <b>no-op logger</b> will be used, and <b>no events</b> will be logged. - * This is done to prevent recursion if attempts are being made to log exceptions that resulted from logger - * initialization. - * </p> + * <p>The service used by this factory must implement {@link LoggerCreationService}. If no + * implementation has been configured or could not be instantiated, a <b>no-op logger</b> will be + * used, and <b>no events</b> will be logged. This is done to prevent recursion if attempts are + * being made to log exceptions that resulted from logger initialization. </p> * * @author evitaliy - * @since 13/09/2016. - * * @see BaseFactory * @see LoggerCreationService + * @since 13/09/2016. */ @SuppressWarnings("ThrowableInstanceNeverThrown") public class LoggerFactory extends BaseFactory { - private static final LoggerCreationService SERVICE; - - static { - LoggerCreationService service; + private static final LoggerCreationService SERVICE; - try { - service = locateService(LoggerCreationService.class); - } catch (Throwable e) { - new RuntimeException("Failed to instantiate logger factory", e).printStackTrace(); - // use the no-op service to prevent recursion in case of an attempt to log an exception as a - // result of a logger initialization error - service = new NoOpLoggerCreationService(); - } + static { + LoggerCreationService service; - SERVICE = service; + try { + service = locateService(LoggerCreationService.class); + } catch (Exception ex) { + new RuntimeException("Failed to instantiate logger factory", ex).printStackTrace(); + // use the no-op service to prevent recursion in case of an attempt to log an exception as a + // result of a logger initialization error + service = new NoOpLoggerCreationService(); } - public static Logger getLogger(String clazzName) { - return SERVICE.getLogger(clazzName); - } - - public static Logger getLogger(Class<?> clazz) { - return SERVICE.getLogger(clazz); - } - - private static class NoOpLoggerCreationService implements LoggerCreationService { - - private static final Logger NO_OP_LOGGER = new Logger() { - - @Override - public String getName() { - return "No-Op Logger"; - } - - @Override - public boolean isMetricsEnabled() { - return false; - } - - @Override - public void metrics(String msg) { } + SERVICE = service; + } - @Override - public void metrics(String msg, Object arg) { } + public static Logger getLogger(String clazzName) { + return SERVICE.getLogger(clazzName); + } - @Override - public void metrics(String msg, Object arg1, Object arg2) { } + public static Logger getLogger(Class<?> clazz) { + return SERVICE.getLogger(clazz); + } - @Override - public void metrics(String msg, Object... arguments) { } + private static class NoOpLoggerCreationService implements LoggerCreationService { - @Override - public void metrics(String msg, Throwable t) { } + private static final Logger NO_OP_LOGGER = new Logger() { - @Override - public boolean isAuditEnabled() { - return false; - } + @Override + public String getName() { + return "No-Op Logger"; + } - @Override - public void audit(String msg) { } + @Override + public boolean isMetricsEnabled() { + return false; + } - @Override - public void audit(String msg, Object arg) { } + @Override + public void metrics(String msg) { + } - @Override - public void audit(String msg, Object arg1, Object arg2) { } + @Override + public void metrics(String msg, Object arg) { + } - @Override - public void audit(String msg, Object... arguments) { } + @Override + public void metrics(String msg, Object arg1, Object arg2) { + } - @Override - public void audit(String msg, Throwable t) { } + @Override + public void metrics(String msg, Object... arguments) { + } - @Override - public boolean isDebugEnabled() { - return false; - } + @Override + public void metrics(String msg, Throwable t) { + } - @Override - public void debug(String msg) { } + @Override + public boolean isAuditEnabled() { + return false; + } - @Override - public void debug(String msg, Object arg) { } + @Override + public void audit(String msg) { + } - @Override - public void debug(String msg, Object arg1, Object arg2) { } + @Override + public void audit(String msg, Object arg) { + } - @Override - public void debug(String msg, Object... arguments) { } + @Override + public void audit(String msg, Object arg1, Object arg2) { + } - @Override - public void debug(String msg, Throwable t) { } + @Override + public void audit(String msg, Object... arguments) { + } - @Override - public boolean isInfoEnabled() { - return false; - } + @Override + public void audit(String msg, Throwable t) { + } - @Override - public void info(String msg) { } + @Override + public boolean isDebugEnabled() { + return false; + } - @Override - public void info(String msg, Object arg) { } + @Override + public void debug(String msg) { + } - @Override - public void info(String msg, Object arg1, Object arg2) { } + @Override + public void debug(String msg, Object arg) { + } - @Override - public void info(String msg, Object... arguments) { } + @Override + public void debug(String msg, Object arg1, Object arg2) { + } - @Override - public void info(String msg, Throwable t) { } + @Override + public void debug(String msg, Object... arguments) { + } - @Override - public boolean isWarnEnabled() { - return false; - } + @Override + public void debug(String msg, Throwable t) { + } - @Override - public void warn(String msg) { } + @Override + public boolean isInfoEnabled() { + return false; + } - @Override - public void warn(String msg, Object arg) { } - - @Override - public void warn(String msg, Object... arguments) { } - - @Override - public void warn(String msg, Object arg1, Object arg2) { } - - @Override - public void warn(String msg, Throwable t) { } - - @Override - public boolean isErrorEnabled() { - return false; - } - - @Override - public void error(String msg) { } - - @Override - public void error(String msg, Object arg) { } - - @Override - public void error(String msg, Object arg1, Object arg2) { } - - @Override - public void error(String msg, Object... arguments) { } - - @Override - public void error(String msg, Throwable t) { } - }; - - @Override - public Logger getLogger(String className) { - return NO_OP_LOGGER; - } + @Override + public void info(String msg) { + } + + @Override + public void info(String msg, Object arg) { + } + + @Override + public void info(String msg, Object arg1, Object arg2) { + } + + @Override + public void info(String msg, Object... arguments) { + } + + @Override + public void info(String msg, Throwable t) { + } + + @Override + public boolean isWarnEnabled() { + return false; + } + + @Override + public void warn(String msg) { + } + + @Override + public void warn(String msg, Object arg) { + } + + @Override + public void warn(String msg, Object... arguments) { + } + + @Override + public void warn(String msg, Object arg1, Object arg2) { + } + + @Override + public void warn(String msg, Throwable t) { + } + + @Override + public boolean isErrorEnabled() { + return false; + } + + @Override + public void error(String msg) { + } + + @Override + public void error(String msg, Object arg) { + } + + @Override + public void error(String msg, Object arg1, Object arg2) { + } + + @Override + public void error(String msg, Object... arguments) { + } + + @Override + public void error(String msg, Throwable t) { + } + }; + + @Override + public Logger getLogger(String className) { + return NO_OP_LOGGER; + } - @Override - public Logger getLogger(Class<?> clazz) { - return NO_OP_LOGGER; - } + @Override + public Logger getLogger(Class<?> clazz) { + return NO_OP_LOGGER; } + } } diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java index 3ad999f272..e2b31c3202 100644 --- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java +++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java @@ -23,57 +23,53 @@ package org.openecomp.sdc.logging.api.context; import org.openecomp.sdc.logging.api.BaseFactory; /** - * <p>Should be used to propagate a diagnostic context (for instance - * <a href="http://www.slf4j.org/manual.html#mdc">MDC</a>) to other threads.</p> - * - * <p>Applicable when creating a child thread directly, or submitting tasks for potentially postponed execution via - * an <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a> (including - * any of the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html">executor - * services</a> and - * <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html">ForkJoinPool</a>).</p> - * + * <p>Should be used to propagate a diagnostic context (for instance <a + * href="http://www.slf4j.org/manual.html#mdc">MDC</a>) to other threads.</p> + * <p>Applicable when creating a child thread directly, or submitting tasks for potentially + * postponed execution via an <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a> + * (including any of the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html">executor + * services</a> and <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html">ForkJoinPool</a>).</p> * <p>The service used by this factory must implement {@link ContextPropagationService}.</p> * * @author evitaliy - * @since 12/09/2016. - * * @see ContextPropagationService + * @since 12/09/2016. */ @SuppressWarnings("ThrowableInstanceNeverThrown") public class TaskFactory extends BaseFactory { - private static final ContextPropagationService SERVICE; - private static final RuntimeException ERROR; - - static { + private static final ContextPropagationService SERVICE; + private static final RuntimeException ERROR; - ContextPropagationService service = null; - RuntimeException error = null; + static { - try { - service = locateService(ContextPropagationService.class); - } catch (Throwable e) { - error = new RuntimeException("Failed to instantiate task factory", e); - } + ContextPropagationService service = null; + RuntimeException error = null; - SERVICE = service; - ERROR = error; + try { + service = locateService(ContextPropagationService.class); + } catch (Exception ex) { + error = new RuntimeException("Failed to instantiate task factory", ex); } - /** - * Modify a task so that a diagnostic context is propagated to the thread when the task runs. Done in a - * logging-framework specific way. - * - * @param task any Runnable that will run in a thread - * @return modified (wrapped) original task that runs the same business logic, but also takes care of copying the - * diagnostic context for logging - */ - public static Runnable create(Runnable task) { + SERVICE = service; + ERROR = error; + } - if (SERVICE == null) { - throw ERROR; - } + /** + * Modify a task so that a diagnostic context is propagated to the thread when the task runs. Done + * in a logging-framework specific way. + * + * @param task any Runnable that will run in a thread + * @return modified (wrapped) original task that runs the same business logic, but also takes care + * of copying the diagnostic context for logging + */ + public static Runnable create(Runnable task) { - return SERVICE.create(task); + if (SERVICE == null) { + throw ERROR; } + + return SERVICE.create(task); + } } diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java index 028a1bcb38..f23a2c5352 100644 --- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java +++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java @@ -5,24 +5,25 @@ package org.openecomp.sdc.logging.messages; */ public class AuditMessages { - public static final String AUDIT_MSG = " --Audit-- "; + public static final String AUDIT_MSG = " --Audit-- "; - public static final String CREATE_VLM = "Create VLM. VLM Name: "; - public static final String CHECK_IN_VLM = "Check in VLM. VLM Id: "; - public static final String CHECK_OUT_VLM = "Check out VLM. VLM Id: "; - public static final String SUBMIT_VLM = "submit VLM. VLM Name: "; + public static final String CREATE_VLM = "Create VLM. VLM Name: "; + public static final String CHECK_IN_VLM = "Check in VLM. VLM Id: "; + public static final String CHECK_OUT_VLM = "Check out VLM. VLM Id: "; + public static final String SUBMIT_VLM = "submit VLM. VLM Name: "; - public static final String CREATE_VSP = "Create VSP. VSP Name: "; - public static final String CHECK_IN_VSP = "Check in VSP. VSP Id: "; - public static final String CHECK_OUT_VSP = "Check out VSP. VSP Id: "; - public static final String SUBMIT_VSP = "Submit VSP. VSP Id: "; + public static final String CREATE_VSP = "Create VSP. VSP Name: "; + public static final String CHECK_IN_VSP = "Check in VSP. VSP Id: "; + public static final String CHECK_OUT_VSP = "Check out VSP. VSP Id: "; + public static final String SUBMIT_VSP = "Submit VSP. VSP Id: "; - public static final String UPLOAD_HEAT = "Upload HEAT. VSP Id: "; - public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact. VSP Id: "; - public static final String UPLOAD_ARTIFACT_MIB_POLL = "Upload Artifact SNMP POLL. VSP Id: "; - public static final String UPLOAD_ARTIFACT_MIB_TRAP = "Upload Artifact SNMP TRAP. VSP Id: "; + public static final String UPLOAD_HEAT = "Upload HEAT. VSP Id: "; + public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact. VSP Id: "; + public static final String UPLOAD_MONITORING_FILE = "Upload Monitoring File of type %s " + + "" + ". VSP Id: %s, component id: %s"; +// public static final String UPLOAD_ARTIFACT_MIB_TRAP = "Upload Artifact SNMP TRAP. VSP Id: "; - public static final String IMPORT_SUCCESS = "VSP import to VF success. VSP Id: "; - public static final String IMPORT_FAIL = "VSP import to VF fail. VSP Id: "; + public static final String IMPORT_SUCCESS = "VSP import to VF success. VSP Id: "; + public static final String IMPORT_FAIL = "VSP import to VF fail. VSP Id: "; } diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java index 141a1496f0..3f48991c7f 100644 --- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java +++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java @@ -27,7 +27,7 @@ public enum LoggerErrorCode { DATA_ERROR("300"), SCHEMA_ERROR("400"), BUSINESS_PROCESS_ERROR("500"), - UNKNOWN_ERROR("900"); + UNKNOWN_ERROR("900"), ; private String errorCode; diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java index 16a7b430b8..7e502d55f2 100644 --- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java +++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java @@ -55,6 +55,8 @@ public class LoggerErrorDescription { public static final String VALIDATE_FILE = "Can't validate file"; public static final String INVALID_FILE_TYPE = "Invalid file type"; public static final String INVALID_ZIP = "Invalid zip file"; + public static final String INVALID_VES_FILE = "Invalid VES file"; + public static final String RESOURCE_UNIQUE_NETWORK_ROLE = diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java index 3fac9547d3..c6d9ebb77f 100644 --- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java +++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java @@ -7,9 +7,9 @@ * 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. @@ -38,6 +38,11 @@ public enum LoggerServiceName { Get_EP, Delete_EP, + Create_LIMIT, + Delete_LIMIT, + Update_LIMIT, + Get_LIMIT, + List_FG, Create_FG, Update_FG, @@ -104,9 +109,9 @@ public enum LoggerServiceName { Get_Questionnaire_Component, Update_Questionnaire_Component, - Upload_MIB_File, - Delete_MIB_File, - List_MIB_Files, + Upload_Monitoring_Artifact, + Delete_Monitoring_Artifact, + List_Monitoring_Artifacts, List_Network, Create_Network, @@ -126,19 +131,42 @@ public enum LoggerServiceName { Create_Process, Update_Process, + Create_Compute, + List_Computes, + Get_Compute, + Update_Compute, + Delete_Compute, + Get_Questionnaire_Compute, + Update_Questionnaire_Compute, + Insert_To_ApplicationConfig_Table, Get_From_ApplicationConfig_Table, Get_List_From_ApplicationConfig_Table_By_Namespace, + Create_Deployment_Flavor, + Get_List_Deployment_flavor, + Get_Deployment_flavor, + Delete_Deployment_flavor, + Update_Deployment_flavor, + Get_List_Activity_Log, Validate, Enrich, Delete_VSP, Get_Process_Artifact, Create_Entity, Checkout_Entity, Undo_Checkout_Entity, Checkin_Entity, Submit_Entity, Get_Entity_Version, Delete_Entity, Undo_Delete_Entity, Translate_Resource, Translate_HEAT, LoggerServiceName, Get_VSP_List, Delete_VLM, Update_Manifest, + Create_Image, + GET_Image_Schema, + List_Images, + GET_Image, + Delete_Image, + Update_Image, CREATE_COMPONENT_DEPENDENCY_MODEL, - GET_COMPONENT_DEPENDENCY_MODEL; + GET_COMPONENT_DEPENDENCY_MODEL, + + Health_check + ; public static String getServiceName(LoggerServiceName serviceName) { return serviceName.name().replace("_", " "); diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java index b496d73d83..6b0570eb29 100644 --- a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java +++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java @@ -7,9 +7,9 @@ * 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. @@ -122,7 +122,9 @@ public class LoggerTragetServiceName { public static final String SUBMIT_VSP = "Submit VSP"; public static final String GET_VSP = "Get VSP"; + public static final String ADD_VSP = "Add VSP"; public static final String DELETE_VSP = "Delete VSP"; + public static final String UPDATE_VSP = "Update VSP"; public static final String ENRICH = "Enrich"; public static final String UPLOAD_FILE = "Upload file"; public static final String GET_UPLOADED_HEAT = "Get Uploaded HEAT File"; @@ -135,8 +137,8 @@ public class LoggerTragetServiceName { public static final String GET_VLM = "Get VLM"; - public static final String VALIDATE_MIB = "Validate MIB File"; - public static final String UPLOAD_MIB = "Upload MIB file"; + public static final String VALIDATE_MONITORING_FILE = "Validate Monitoring File"; + public static final String UPLOAD_MONITORING_FILE = "Upload Monitoring file"; public static final String GET_VERSION_INFO = "Get version info"; @@ -145,12 +147,18 @@ public class LoggerTragetServiceName { public static final String CREATE_COMPONENT = "Create Component"; public static final String DELETE_COMPONENT = "Delete Component"; + public static final String UPDATE_COMPONENT = "Update Component"; public static final String GET_PROCESS_ARTIFACT = "Get Process Artifact"; public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact"; public static final String CREATE_NIC = "Create Nic"; public static final String DELETE_NIC = "Delete Nic"; + public static final String UPDATE_NIC = "Update Nic"; + + public static final String CREATE_DEPLOYMENT_FLAVOR = "Create Deployment Flavor"; + public static final String DELETE_DEPLOYMENT_FLAVOR = "Delete Deployment Flavor"; + public static final String UPDATE_DEPLOYMENT_FLAVOR = "Update Deployment Flavor"; public static final String EXTRACT_COMPOSITION_DATA = "Extract Composition Data"; @@ -178,6 +186,18 @@ public class LoggerTragetServiceName { "Insert Value Into Application Config"; public static final String VALIDATE_FILE_DATA_STRUCTURE = "Validate Manifest Sent From User"; + public static final String CREATE_IMAGE = "Create Image"; + public static final String DELETE_IMAGE = "Delete Image"; + public static final String UPDATE_IMAGE = "Update Image"; + + public static final String CREATE_COMPUTE = "Create Compute"; + public static final String UPDATE_COMPUTE = "Update Compute"; + public static final String DELETE_COMPUTE = "Delete Compute"; + + public static final String COLLECT_MANUAL_VSP_TOSCA_DATA = "Collect Manual Vsp Tosca data"; + public static final String GENERATE_MANUAL_VSP_TOSCA = "Generate Manual Vsp Tosca"; + + public static final String VALIDATE_DATE_RANGE = "Validate Date Range"; public static final String CREATE_COMPONENT_DEPENDENCY_MODEL = "Create Component Dependency " + "Model"; |