001 /** 002 * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved. 003 * 004 * This library is free software; you can redistribute it and/or modify it under 005 * the terms of the GNU Lesser General Public License as published by the Free 006 * Software Foundation; either version 2.1 of the License, or (at your option) 007 * any later version. 008 * 009 * This library is distributed in the hope that it will be useful, but WITHOUT 010 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 011 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 012 * details. 013 */ 014 015 package com.liferay.portlet.social.service; 016 017 import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil; 018 import com.liferay.portal.kernel.util.MethodCache; 019 import com.liferay.portal.kernel.util.ReferenceRegistry; 020 021 /** 022 * The utility for the social equity log local service. This utility wraps {@link com.liferay.portlet.social.service.impl.SocialEquityLogLocalServiceImpl} and is the primary access point for service operations in application layer code running on the local server. 023 * 024 * <p> 025 * This is a local service. Methods of this service will not have security checks based on the propagated JAAS credentials because this service can only be accessed from within the same VM. 026 * </p> 027 * 028 * @author Brian Wing Shun Chan 029 * @see SocialEquityLogLocalService 030 * @see com.liferay.portlet.social.service.base.SocialEquityLogLocalServiceBaseImpl 031 * @see com.liferay.portlet.social.service.impl.SocialEquityLogLocalServiceImpl 032 * @generated 033 */ 034 public class SocialEquityLogLocalServiceUtil { 035 /* 036 * NOTE FOR DEVELOPERS: 037 * 038 * Never modify this class directly. Add custom service methods to {@link com.liferay.portlet.social.service.impl.SocialEquityLogLocalServiceImpl} and rerun ServiceBuilder to regenerate this class. 039 */ 040 041 /** 042 * Adds the social equity log to the database. Also notifies the appropriate model listeners. 043 * 044 * @param socialEquityLog the social equity log 045 * @return the social equity log that was added 046 * @throws SystemException if a system exception occurred 047 */ 048 public static com.liferay.portlet.social.model.SocialEquityLog addSocialEquityLog( 049 com.liferay.portlet.social.model.SocialEquityLog socialEquityLog) 050 throws com.liferay.portal.kernel.exception.SystemException { 051 return getService().addSocialEquityLog(socialEquityLog); 052 } 053 054 /** 055 * Creates a new social equity log with the primary key. Does not add the social equity log to the database. 056 * 057 * @param equityLogId the primary key for the new social equity log 058 * @return the new social equity log 059 */ 060 public static com.liferay.portlet.social.model.SocialEquityLog createSocialEquityLog( 061 long equityLogId) { 062 return getService().createSocialEquityLog(equityLogId); 063 } 064 065 /** 066 * Deletes the social equity log with the primary key from the database. Also notifies the appropriate model listeners. 067 * 068 * @param equityLogId the primary key of the social equity log 069 * @throws PortalException if a social equity log with the primary key could not be found 070 * @throws SystemException if a system exception occurred 071 */ 072 public static void deleteSocialEquityLog(long equityLogId) 073 throws com.liferay.portal.kernel.exception.PortalException, 074 com.liferay.portal.kernel.exception.SystemException { 075 getService().deleteSocialEquityLog(equityLogId); 076 } 077 078 /** 079 * Deletes the social equity log from the database. Also notifies the appropriate model listeners. 080 * 081 * @param socialEquityLog the social equity log 082 * @throws SystemException if a system exception occurred 083 */ 084 public static void deleteSocialEquityLog( 085 com.liferay.portlet.social.model.SocialEquityLog socialEquityLog) 086 throws com.liferay.portal.kernel.exception.SystemException { 087 getService().deleteSocialEquityLog(socialEquityLog); 088 } 089 090 /** 091 * Performs a dynamic query on the database and returns the matching rows. 092 * 093 * @param dynamicQuery the dynamic query 094 * @return the matching rows 095 * @throws SystemException if a system exception occurred 096 */ 097 @SuppressWarnings("rawtypes") 098 public static java.util.List dynamicQuery( 099 com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery) 100 throws com.liferay.portal.kernel.exception.SystemException { 101 return getService().dynamicQuery(dynamicQuery); 102 } 103 104 /** 105 * Performs a dynamic query on the database and returns a range of the matching rows. 106 * 107 * <p> 108 * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. 109 * </p> 110 * 111 * @param dynamicQuery the dynamic query 112 * @param start the lower bound of the range of model instances 113 * @param end the upper bound of the range of model instances (not inclusive) 114 * @return the range of matching rows 115 * @throws SystemException if a system exception occurred 116 */ 117 @SuppressWarnings("rawtypes") 118 public static java.util.List dynamicQuery( 119 com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery, int start, 120 int end) throws com.liferay.portal.kernel.exception.SystemException { 121 return getService().dynamicQuery(dynamicQuery, start, end); 122 } 123 124 /** 125 * Performs a dynamic query on the database and returns an ordered range of the matching rows. 126 * 127 * <p> 128 * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. 129 * </p> 130 * 131 * @param dynamicQuery the dynamic query 132 * @param start the lower bound of the range of model instances 133 * @param end the upper bound of the range of model instances (not inclusive) 134 * @param orderByComparator the comparator to order the results by (optionally <code>null</code>) 135 * @return the ordered range of matching rows 136 * @throws SystemException if a system exception occurred 137 */ 138 @SuppressWarnings("rawtypes") 139 public static java.util.List dynamicQuery( 140 com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery, int start, 141 int end, 142 com.liferay.portal.kernel.util.OrderByComparator orderByComparator) 143 throws com.liferay.portal.kernel.exception.SystemException { 144 return getService() 145 .dynamicQuery(dynamicQuery, start, end, orderByComparator); 146 } 147 148 /** 149 * Returns the number of rows that match the dynamic query. 150 * 151 * @param dynamicQuery the dynamic query 152 * @return the number of rows that match the dynamic query 153 * @throws SystemException if a system exception occurred 154 */ 155 public static long dynamicQueryCount( 156 com.liferay.portal.kernel.dao.orm.DynamicQuery dynamicQuery) 157 throws com.liferay.portal.kernel.exception.SystemException { 158 return getService().dynamicQueryCount(dynamicQuery); 159 } 160 161 /** 162 * Returns the social equity log with the primary key. 163 * 164 * @param equityLogId the primary key of the social equity log 165 * @return the social equity log 166 * @throws PortalException if a social equity log with the primary key could not be found 167 * @throws SystemException if a system exception occurred 168 */ 169 public static com.liferay.portlet.social.model.SocialEquityLog getSocialEquityLog( 170 long equityLogId) 171 throws com.liferay.portal.kernel.exception.PortalException, 172 com.liferay.portal.kernel.exception.SystemException { 173 return getService().getSocialEquityLog(equityLogId); 174 } 175 176 public static com.liferay.portal.model.PersistedModel getPersistedModel( 177 java.io.Serializable primaryKeyObj) 178 throws com.liferay.portal.kernel.exception.PortalException, 179 com.liferay.portal.kernel.exception.SystemException { 180 return getService().getPersistedModel(primaryKeyObj); 181 } 182 183 /** 184 * Returns a range of all the social equity logs. 185 * 186 * <p> 187 * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. 188 * </p> 189 * 190 * @param start the lower bound of the range of social equity logs 191 * @param end the upper bound of the range of social equity logs (not inclusive) 192 * @return the range of social equity logs 193 * @throws SystemException if a system exception occurred 194 */ 195 public static java.util.List<com.liferay.portlet.social.model.SocialEquityLog> getSocialEquityLogs( 196 int start, int end) 197 throws com.liferay.portal.kernel.exception.SystemException { 198 return getService().getSocialEquityLogs(start, end); 199 } 200 201 /** 202 * Returns the number of social equity logs. 203 * 204 * @return the number of social equity logs 205 * @throws SystemException if a system exception occurred 206 */ 207 public static int getSocialEquityLogsCount() 208 throws com.liferay.portal.kernel.exception.SystemException { 209 return getService().getSocialEquityLogsCount(); 210 } 211 212 /** 213 * Updates the social equity log in the database or adds it if it does not yet exist. Also notifies the appropriate model listeners. 214 * 215 * @param socialEquityLog the social equity log 216 * @return the social equity log that was updated 217 * @throws SystemException if a system exception occurred 218 */ 219 public static com.liferay.portlet.social.model.SocialEquityLog updateSocialEquityLog( 220 com.liferay.portlet.social.model.SocialEquityLog socialEquityLog) 221 throws com.liferay.portal.kernel.exception.SystemException { 222 return getService().updateSocialEquityLog(socialEquityLog); 223 } 224 225 /** 226 * Updates the social equity log in the database or adds it if it does not yet exist. Also notifies the appropriate model listeners. 227 * 228 * @param socialEquityLog the social equity log 229 * @param merge whether to merge the social equity log with the current session. See {@link com.liferay.portal.service.persistence.BatchSession#update(com.liferay.portal.kernel.dao.orm.Session, com.liferay.portal.model.BaseModel, boolean)} for an explanation. 230 * @return the social equity log that was updated 231 * @throws SystemException if a system exception occurred 232 */ 233 public static com.liferay.portlet.social.model.SocialEquityLog updateSocialEquityLog( 234 com.liferay.portlet.social.model.SocialEquityLog socialEquityLog, 235 boolean merge) 236 throws com.liferay.portal.kernel.exception.SystemException { 237 return getService().updateSocialEquityLog(socialEquityLog, merge); 238 } 239 240 /** 241 * Returns the Spring bean ID for this bean. 242 * 243 * @return the Spring bean ID for this bean 244 */ 245 public static java.lang.String getBeanIdentifier() { 246 return getService().getBeanIdentifier(); 247 } 248 249 /** 250 * Sets the Spring bean ID for this bean. 251 * 252 * @param beanIdentifier the Spring bean ID for this bean 253 */ 254 public static void setBeanIdentifier(java.lang.String beanIdentifier) { 255 getService().setBeanIdentifier(beanIdentifier); 256 } 257 258 /** 259 * Records the social equity action and adjusts social equity scores. 260 * 261 * @param userId the primary key of the acting user 262 * @param assetEntryId the primary key of the target asset entry 263 * @param actionId the ID of the action 264 * @throws PortalException if the asset entry could not be found 265 * @throws SystemException if a system exception occurred 266 * @deprecated Replaced by {@link #addEquityLogs(long, long, String, 267 String)} to support the <code>extraData</code> parameter 268 */ 269 public static void addEquityLogs(long userId, long assetEntryId, 270 java.lang.String actionId) 271 throws com.liferay.portal.kernel.exception.PortalException, 272 com.liferay.portal.kernel.exception.SystemException { 273 getService().addEquityLogs(userId, assetEntryId, actionId); 274 } 275 276 /** 277 * Records the social equity action and adjusts social equity scores based 278 * on the user's action done on the target asset entry. 279 * 280 * <p> 281 * The <code>extraData</code> parameter can contain further information 282 * about the action such as the file name for a download action. It is used 283 * to distinguish between otherwise equal actions, such as multiple 284 * downloads of message boards attachments. 285 * </p> 286 * 287 * @param userId the primary key of the acting user 288 * @param assetEntryId the primary key of the target asset entry 289 * @param actionId the ID of the action 290 * @param extraData the extra data associated with the action 291 * @throws PortalException if the asset entry could not be found 292 * @throws SystemException if a system exception occurred 293 */ 294 public static void addEquityLogs(long userId, long assetEntryId, 295 java.lang.String actionId, java.lang.String extraData) 296 throws com.liferay.portal.kernel.exception.PortalException, 297 com.liferay.portal.kernel.exception.SystemException { 298 getService().addEquityLogs(userId, assetEntryId, actionId, extraData); 299 } 300 301 /** 302 * Records the social equity action and adjusts social equity scores based 303 * on the user's action done on the target asset entry identified by the 304 * className/classPK pair. 305 * 306 * <p> 307 * The <code>extraData</code> parameter can contain further information 308 * about the action such as the file name for a download action. It is used 309 * to distinguish between otherwise equal actions, such as multiple 310 * downloads of message boards attachments. 311 * </p> 312 * 313 * @param userId the primary key of the acting user 314 * @param className the class name of the target asset 315 * @param classPK the primary key of the target asset (not the asset entry 316 referring to it) 317 * @param actionId the ID of the action 318 * @param extraData the extra data associated with the action 319 * @throws PortalException if the asset entry could not be found 320 * @throws SystemException if a system exception occurred 321 */ 322 public static void addEquityLogs(long userId, java.lang.String className, 323 long classPK, java.lang.String actionId, java.lang.String extraData) 324 throws com.liferay.portal.kernel.exception.PortalException, 325 com.liferay.portal.kernel.exception.SystemException { 326 getService() 327 .addEquityLogs(userId, className, classPK, actionId, extraData); 328 } 329 330 /** 331 * Inserts a new row for the asset entry into the 332 * <code>SocialEquityAssetEntry</code> table. 333 * 334 * <p> 335 * This method should not be used directly by portlets. It is made public 336 * so that it can be in its own transaction to safeguard against 337 * concurrency issues. 338 * </p> 339 * 340 * @param assetEntry the asset entry 341 * @throws SystemException if a system exception occurred 342 */ 343 public static void addSocialEquityAssetEntry( 344 com.liferay.portlet.asset.model.AssetEntry assetEntry) 345 throws com.liferay.portal.kernel.exception.SystemException { 346 getService().addSocialEquityAssetEntry(assetEntry); 347 } 348 349 /** 350 * Inserts a new row for the user into the <code>SocialEquityUser</code> 351 * table. 352 * 353 * <p> 354 * This method should not be used directly by portlets. It is made public 355 * so that it can be in its own transaction to safeguard against 356 * concurrency issues. 357 * </p> 358 * 359 * @param groupId the primary key of the group the user is currently 360 acting in 361 * @param user the acting user 362 * @throws SystemException if a system exception occurred 363 */ 364 public static void addSocialEquityUser(long groupId, 365 com.liferay.portal.model.User user) 366 throws com.liferay.portal.kernel.exception.SystemException { 367 getService().addSocialEquityUser(groupId, user); 368 } 369 370 /** 371 * This is a cleanup method to remove expired actions and any data 372 * associated with them. 373 * 374 * <p> 375 * <i>This method should normally only be called by the portal.</i> 376 * </p> 377 * 378 * <p> 379 * By default it is run by the scheduler once a day, but the frequency can 380 * be modified by overriding the 381 * <code>social.equity.equity.log.check.interval</code> property found in 382 * <code>portal.properties</code>. 383 * </p> 384 * 385 * @throws SystemException if a system exception occurred 386 */ 387 public static void checkEquityLogs() 388 throws com.liferay.portal.kernel.exception.SystemException { 389 getService().checkEquityLogs(); 390 } 391 392 /** 393 * Removes all actions associated with the asset and adjusts equity scores 394 * accordingly. 395 * 396 * <p> 397 * This method is called by the <code>AssetEntry</code> service 398 * automatically when an asset entry is deleted. 399 * </p> 400 * 401 * @param assetEntryId the primary key of the asset entry 402 * @throws SystemException if a system exception occurred 403 */ 404 public static void deactivateEquityLogs(long assetEntryId) 405 throws com.liferay.portal.kernel.exception.SystemException { 406 getService().deactivateEquityLogs(assetEntryId); 407 } 408 409 /** 410 * Removes actions identified by the acting user, the action ID and the 411 * target asset's primary key. 412 * 413 * @param userId the primary key of the acting user 414 * @param assetEntryId the primary key of the target asset entry 415 * @param actionId the ID of the action 416 * @throws PortalException if the asset entry could not be found 417 * @throws SystemException if a system exception occurred 418 * @deprecated Replaced by {@link #deactivateEquityLogs(long, String, long, 419 String, String)} to support the <code>extraData</code> 420 parameter 421 */ 422 public static void deactivateEquityLogs(long userId, long assetEntryId, 423 java.lang.String actionId) 424 throws com.liferay.portal.kernel.exception.PortalException, 425 com.liferay.portal.kernel.exception.SystemException { 426 getService().deactivateEquityLogs(userId, assetEntryId, actionId); 427 } 428 429 /** 430 * Removes actions identified by the acting user, the action ID and the 431 * target asset's className/classPK pair. 432 * 433 * @param userId the primary key of the acting user 434 * @param className the class name of the target asset 435 * @param classPK the primary key of the target asset (not the asset 436 entry referring to it) 437 * @param actionId the ID of the action 438 * @throws PortalException if the asset entry cannot be retrieved 439 * @throws SystemException if a system exception occurred 440 * @deprecated Replaced by {@link #deactivateEquityLogs(long, String, long, 441 String, String)} to support the <code>extraData</code> 442 parameter 443 */ 444 public static void deactivateEquityLogs(long userId, 445 java.lang.String className, long classPK, java.lang.String actionId) 446 throws com.liferay.portal.kernel.exception.PortalException, 447 com.liferay.portal.kernel.exception.SystemException { 448 getService().deactivateEquityLogs(userId, className, classPK, actionId); 449 } 450 451 /** 452 * Removes actions identified by the acting user, the action ID and the 453 * target asset's className/classPK pair. 454 * 455 * <p> 456 * The <code>extraData</code> parameter can be used to further identify the 457 * action. 458 * </p> 459 * 460 * @param userId the primary key of the acting user 461 * @param className the class name of the target asset 462 * @param classPK the primary key of the target asset (not the asset entry 463 referring to it) 464 * @param actionId the ID of the action 465 * @param extraData the extra data associated with the action 466 * @throws PortalException if the asset entry cannot be retrieved 467 * @throws SystemException if a system exception occurred 468 */ 469 public static void deactivateEquityLogs(long userId, 470 java.lang.String className, long classPK, java.lang.String actionId, 471 java.lang.String extraData) 472 throws com.liferay.portal.kernel.exception.PortalException, 473 com.liferay.portal.kernel.exception.SystemException { 474 getService() 475 .deactivateEquityLogs(userId, className, classPK, actionId, 476 extraData); 477 } 478 479 /** 480 * Removes actions identified by action ID done on an asset by any user. 481 * 482 * @param className the class name of the target asset 483 * @param classPK the primary key of the target asset (not the asset entry 484 referring to it) 485 * @param actionId the ID of the action 486 * @param extraData the extra data associated with the action 487 * @throws PortalException if the asset entry cannot be retrieved 488 * @throws SystemException if a system exception occurred 489 */ 490 public static void deactivateEquityLogs(java.lang.String className, 491 long classPK, java.lang.String actionId, java.lang.String extraData) 492 throws com.liferay.portal.kernel.exception.PortalException, 493 com.liferay.portal.kernel.exception.SystemException { 494 getService() 495 .deactivateEquityLogs(className, classPK, actionId, extraData); 496 } 497 498 /** 499 * Removes all actions done by the user. 500 * 501 * <p> 502 * This method is called by the portal when a user is deleted. 503 * </p> 504 * 505 * @param userId the primary key of the user 506 * @throws SystemException if a system exception occurred 507 */ 508 public static void deactivateUserEquityLogs(long userId) 509 throws com.liferay.portal.kernel.exception.SystemException { 510 getService().deactivateUserEquityLogs(userId); 511 } 512 513 /** 514 * Increments the information equity value of the asset by the number set 515 * in the equity payload. 516 * 517 * <p> 518 * This method is annotated with the <code>BufferedIncrement</code> 519 * annotation, which means that in case of heavy load, invocations of this 520 * method can be aggregated into one method call containing the sum of the 521 * individual increments. 522 * </p> 523 * 524 * <p> 525 * <i>This method should not be called directly by portlets. It is made 526 * public only to accommodate the <code>BufferedIncrement</code> 527 * annotation.</i> 528 * </p> 529 * 530 * @param assetEntryId the primary key of the target asset entry 531 * @param equityPayload the equity payload containing the increments 532 * @throws SystemException if a system exception occurred 533 */ 534 public static void incrementSocialEquityAssetEntry_IQ(long assetEntryId, 535 com.liferay.portlet.social.model.SocialEquityIncrementPayload equityPayload) 536 throws com.liferay.portal.kernel.exception.SystemException { 537 getService() 538 .incrementSocialEquityAssetEntry_IQ(assetEntryId, equityPayload); 539 } 540 541 /** 542 * Increments the contribution equity value of the user by the number set 543 * in the equity payload. 544 * 545 * <p> 546 * This method is annotated with the <code>BufferedIncrement</code> 547 * annotation, which means that in case of heavy load, invocations of this 548 * method can be aggregated into one method call containing the sum of the 549 * individual increments. 550 * </p> 551 * 552 * <P> 553 * <i>This method should not be called directly by portlets. It is made 554 * public only to accommodate the <code>BufferedIncrement</code> 555 * annotation.</i> 556 * </p> 557 * 558 * @param groupId the primary key of the group in which the user is acting 559 * @param userId the primary key of the acting user 560 * @param equityPayload the equity payload containing the increments 561 * @throws SystemException if a system exception occurred 562 */ 563 public static void incrementSocialEquityUser_CQ(long groupId, long userId, 564 com.liferay.portlet.social.model.SocialEquityIncrementPayload equityPayload) 565 throws com.liferay.portal.kernel.exception.SystemException { 566 getService().incrementSocialEquityUser_CQ(groupId, userId, equityPayload); 567 } 568 569 /** 570 * Increments the participation equity value of the user by the number set 571 * in the equity payload. 572 * 573 * <p> 574 * This method is annotated with the <code>BufferedIncrement</code> 575 * annotation, which means that in case of heavy load, invocations of this 576 * method can be aggregated into one method call containing the sum of the 577 * individual increments. 578 * </p> 579 * 580 * <p> 581 * <i>This method should not be called directly by portlets. It is made 582 * public only to accommodate the <code>BufferedIncrement</code> 583 * annotation. </i> 584 * </p> 585 * 586 * @param groupId the primary key of the group in which the user is acting 587 * @param userId the primary key of the acting user 588 * @param equityPayload the equity payload containing the increments 589 * @throws SystemException if a system exception occurred 590 */ 591 public static void incrementSocialEquityUser_PQ(long groupId, long userId, 592 com.liferay.portlet.social.model.SocialEquityIncrementPayload equityPayload) 593 throws com.liferay.portal.kernel.exception.SystemException { 594 getService().incrementSocialEquityUser_PQ(groupId, userId, equityPayload); 595 } 596 597 /** 598 * Updates user ranking for all groups. 599 */ 600 public static void updateRanks() { 601 getService().updateRanks(); 602 } 603 604 /** 605 * Updates user ranking for a group. 606 * 607 * @param groupId the primary key of the group 608 */ 609 public static void updateRanks(long groupId) { 610 getService().updateRanks(groupId); 611 } 612 613 public static SocialEquityLogLocalService getService() { 614 if (_service == null) { 615 _service = (SocialEquityLogLocalService)PortalBeanLocatorUtil.locate(SocialEquityLogLocalService.class.getName()); 616 617 ReferenceRegistry.registerReference(SocialEquityLogLocalServiceUtil.class, 618 "_service"); 619 MethodCache.remove(SocialEquityLogLocalService.class); 620 } 621 622 return _service; 623 } 624 625 public void setService(SocialEquityLogLocalService service) { 626 MethodCache.remove(SocialEquityLogLocalService.class); 627 628 _service = service; 629 630 ReferenceRegistry.registerReference(SocialEquityLogLocalServiceUtil.class, 631 "_service"); 632 MethodCache.remove(SocialEquityLogLocalService.class); 633 } 634 635 private static SocialEquityLogLocalService _service; 636 }