1 /**
2 * Copyright 2011-2013 The Kuali Foundation Licensed under the
3 * Educational Community License, Version 2.0 (the "License"); you may
4 * not use this file except in compliance with the License. You may
5 * obtain a copy of the License at
6 *
7 * http://www.osedu.org/licenses/ECL-2.0
8 *
9 * Unless required by applicable law or agreed to in writing,
10 * software distributed under the License is distributed on an "AS IS"
11 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12 * or implied. See the License for the specific language governing
13 * permissions and limitations under the License.
14 */
15 package org.kuali.mobility.push.service.send.config;
16
17 import java.util.Properties;
18
19 import net.rim.pushsdk.commons.PushSDKProperties;
20
21 import org.apache.commons.lang.StringUtils;
22 import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.beans.factory.annotation.Qualifier;
24
25 /**
26 * Class to act as the configuration require for BlackBerry Push notifications.
27 * This class only implements public messaging (not BES or BDS)
28 *
29 * @author Kuali Mobility Team (mobility.dev@kuali.org)
30 * @since 2.2.0
31 */
32 public class BlackberryPushConfig implements PushSDKProperties {
33
34 /** Flag if this config is for the evaluation of Blackberry Push Service */
35 private boolean eval = true;
36
37 /**
38 * Application ID
39 */
40 private String applicationId;
41
42 /**
43 * Content provider ID
44 */
45 private String cpid = "";
46
47 /**
48 * Base PPG URL
49 */
50 private String ppgBaseUrl;
51
52 /**
53 * URL to send Push notifications too
54 */
55 private String pushUrl;
56
57 /**
58 * A reference to the KME Properties
59 */
60 @Autowired
61 @Qualifier("kmeProperties")
62 private Properties kmeProperties;
63
64 /**
65 * Maximum number of attempts to generate a unique push id before giving up
66 */
67 // Property : regenerate.pushid.max.attempts
68 private int regeneratePushIdMaxAttempts = 5;
69
70 /**
71 * The default deliver before timestamp is the current time plus this offset in milliseconds.
72 * Required for low level APIs. This is only used in the low-level PAP component, if no expiry date is specified through the push API.
73 * The high-level push uses the push application's defaultPushLiveTime, if not specified in the API through PushParameters.
74 */
75 // Property : default.deliver.before.timestamp.offset
76 private long defaultDeliverBeforeTimestampOffset = 3600000L;
77
78 /**
79 * List of parser special characters that should be avoided when specifying values of PAP message elements.
80 * For example, the characters below are not allowed for the pushId element of the PAP XML.
81 * Required for low level APIs
82 */
83 // Property :
84 private char[] parserSpecialCharacters = new char[] {'&','"',':','<'};
85
86 /**
87 * Maximum number of SQL IN clause parameters allowed by the DB implementation being used (i.e. Oracle limit is 1000)
88 */
89 // Property : "parser.special.characters
90 private int maxInClauseValues = 1000;
91
92 /**
93 * Push submission URL of the public/BIS push server. If you are not using a public/BIS PPG, this value should not be set.
94 * Required for low level APIs (if using a BIS push server)
95 */
96 // Property : public.ppg.address
97 private String publicPpgAddress = "/mss/PD_pushRequest";
98
99 /**
100 * Push submission URL of the enterprise/BES central push server. If you are not using an enterprise/BES PPG, this value should not be set.
101 * Note: For backwards compatibility this URL may be a BDS PPG URL if you wish to use your existing push initiator unchanged to push to BB10 devices.
102 * Required for low level APIs (if using a BES push server)
103 */
104 // Property : enterprise.ppg.address
105 private String enterprisePpgAddress = "/pap";
106
107 /**
108 * Push submission URL of the enterprise/BDS central push server. If you are not using an enterprise/BDS PPG, this value should not be set.
109 * Required for low level APIs (if using a BDS push server)
110 */
111 // Property : bds.ppg.address
112 private String BDSPpgAddress = "/pap";
113
114 /**
115 * Maximum size of the result notification queue before it starts rejecting new notifications
116 */
117 // Property : acknowledgement.max.queue.size
118 private int acknowledgementMaxQueueSize = 100000;
119
120 /**
121 * Maximum number of threads processing the internal result notification queue and notifying the listeners
122 */
123 // Property : acknowledgement.max.threads
124 private int acknowledgementMaxThreads = 20;
125
126 /**
127 * Maximum number of result notifications in a batch for processing
128 */
129 // Property : acknowledgement.batch.size
130 private int acknowledgementBatchSize = 500;
131
132 /**
133 * Time in milliseconds to delay, after looking up and not finding the push request detail that corresponds to
134 * a result notification, before retrying the lookup.
135 * This property is needed for the case where the result notification has come back before the push request
136 * detail has been committed to storage.
137 * Note: This property only applies to push applications that have the "store push requests" flag set to true.
138 */
139 // Property : acknowledgement.push.lookup.retry.delay
140 private int acknowledgementPushLookupRetryDelay = 5000;
141
142 /**
143 * When the number of subscribers to validate are below this water mark an optimized query for small number of subscribers will be used;
144 * conversely when above this number a second optimized query for a large number of subscribers will be used
145 */
146 // Property : subscription.validation.high.water.mark
147 private int subscriptionValidationHighWaterMark = 100000;
148
149 /**
150 * Number of subscribers to load at once from the database to validate. Making this number too large may exceed available system memory.
151 * Making this number too small will decrease performance as more calls to the persistent store will be required.
152 * Important: This number should never be zero! One must be the minimum value
153 */
154 // Property : subscription.validation.batch.size
155 private int subscriptionValidationBatchSize = 100000;
156
157 /**
158 * Subscriber Deregistration URL for public/BIS push
159 * Note: If you are not using a public/BIS PPG, this value should not be set.
160 */
161 // Property : subscription.deregistration.url
162 private String subscriptionDeregistrationUrl = "/mss/PD_cpDeregUser?pin=";
163
164 /**
165 * Suspend Subscription URL for public/BIS push
166 * Note: If you are not using a public/BIS PPG, this value should not be set.
167 */
168 // Property : subscription.suspend.url
169 private String subscriptionSuspendUrl = "/mss/PD_cpSub?cpAction=suspend&pin=";
170
171 /**
172 * Resume Subscription URL for public/BIS push
173 * Note: If you are not using a public/BIS PPG, this value should not be set.
174 */
175 // Property : subscription.resume.url
176 private String subscriptionResumeUrl = "/mss/PD_cpSub?cpAction=resume&pin=";
177
178 /**
179 * Maximum number of threads to use for large subscription validation/subscription matching
180 */
181 // Property : subscription.matching.max.threads
182 private int subscriptionMatchingMaxThreads = 5;
183
184 /**
185 * The max. number of results returned by a subscriber find operation. Making this value too large may exceed available system memory.
186 */
187 // Property : subscription.find.max.results
188 private int subscriptionFindMaxResults = 100000;
189
190 /**
191 * The max. number of results returned by a push request detail find operation. Making this value too large may exceed available system memory.
192 */
193 // Property : push.request.detail.find.max.results
194 private int pushRequestDetailFindMaxResults = 100000;
195
196 /**
197 * Defines the type of database that the SDK is working with. The options are: mysql, oracle.
198 */
199 // Property : database.type
200 private String databaseType = "mysql";
201
202 /**
203 * DTD declaration to use when constructing XML to send to the public/BIS PPG (this property is not related to parsing XML sent from the PPG).
204 * Important: This property should not be changed unless the PPG changes the DTD it is using first!
205 * Required for low level APIs (if using BIS push server)
206 */
207 // Property : dtd.declaration.public
208 private String dtdDeclarationPublic = "<!DOCTYPE pap PUBLIC \"-//WAPFORUM//DTD PAP 2.1//EN\" \"http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd\">";
209
210 /**
211 * DTD declaration to use when constructing XML to send to the enterprise/BES and enterprise/BDS PPGs (this property is not related to parsing XML sent from the PPG).
212 * Important: This property should not be changed unless the PPG changes the DTD it is using first!
213 * Required for low level APIs (if using BES or BDS push server)
214 */
215 // Property : dtd.declaration.enterprise
216 private String dtdDeclarationEnterprise = "<!DOCTYPE pap PUBLIC \"-//WAPFORUM//DTD PAP 2.0//EN\" \"http://www.wapforum.org/DTD/pap_2.0.dtd\" [<?wap-pap-ver supported-versions=\"2.0\"?>]>";
217
218 /**
219 * Connection timeout in milliseconds
220 * Required for low level APIs
221 */
222 // Property : http.connection.timeout
223 private int httpConnectionTimeout = 60000;
224
225 /**
226 * Read timeout in milliseconds
227 * Required for low level APIs
228 */
229 // Property : http.read.timeout
230 private int httpReadTimeout = 120000;
231
232 /**
233 * Whether to use persistent connections (true or false)
234 * Required for low level APIs
235 */
236 // Property : http.is.persistent
237 private boolean httpIsPersistent = true;
238
239 /**
240 * Queue size to use during unsubscribes for a hard application delete.
241 * The queue will block and wait if the threads working on the unsubscribes cannot keep up with the queue filling up.
242 */
243 // Property : pushapp.delete.unsubscribe.queuesize
244 private int pushAppDeleteUnsubscribeQueueSize = 100000;
245
246 /**
247 * The amount of time to wait (in minutes) for the unsubscribing of subscribers
248 * for a hard application delete before timing out and throwing an exception.
249 */
250 // Property : pushapp.delete.unsubscribe.timeout
251 private int pushAppDeleteUnsubscribeTimeout = 30;
252
253 /**
254 * The amount of time to wait (in minutes) for the deletion of subscribers
255 * for a hard application delete before timing out and throwing an exception.
256 */
257 // Property : pushapp.subscriber.delete.timeout
258 private int pushAppSubscriberDeleteTimeout = 10;
259
260 /**
261 * Queue size to use for large subscription validation/subscription matching
262 * The queue will block and wait if the threads working on the subscription validation/matching cannot keep up with the queue filling up.
263 */
264 // Property : subscription.matching.queuesize
265 private int subscriptionMatchingQueueSize = 50000;
266
267 /**
268 * When syncing up the status of subscribers with the PPG, the batch size to use for each sync request.
269 * Important: The max. number of subscribers to include in each sync request is actually defined by the PPG.
270 * It is present here in case it changes on the PPG end and has to be updated here on the SDK side.
271 * Note: If you are not using a public/BIS PPG, this property will be ignored.
272 */
273 // Property : subscription.ppg.sync.batch.size
274 private int subscriptionPPGSyncBatchSize = 10000;
275
276 /**
277 * Subscription query URL for public/BIS push
278 * Note: If you are not using a public/BIS PPG, this value should not be set.
279 * Required for low level APIs (if using a BIS push server)
280 */
281 // Property : subscription.query.url
282 private String subscriptionQueryUrl = "/mss/PD_cpSubQuery";
283
284 /**
285 * Queue size to use for syncing up the status of subscribers with the PPG.
286 * The queue will block and wait if the threads working on the subscription status syncing cannot keep up with the queue filling up.
287 * Note: If you are not using a public/BIS PPG, this property will be ignored.
288 */
289 // Property : subscription.ppg.sync.queuesize
290 private int subscriptionPPGSyncQueueSize = 5000;
291
292 /**
293 * The amount of time to wait (in minutes) for the syncing up of the status of subscribers with the PPG before timing out
294 * and throwing an exception.
295 * Note: If you are not using a public/BIS PPG, this property will be ignored.
296 */
297 // Property : subscription.ppg.sync.timeout
298 private int subscriptionPPGSyncTimeout = 30;
299
300 /**
301 * Maximum number of threads to use for the syncing up of the status of subscribers with the PPG.
302 * Note: If you are not using a public/BIS PPG, this property will be ignored.
303 */
304 // Property : subscription.ppg.sync.threads
305 private int subscriptionPPGSyncMaxThreads = 5;
306
307 /**
308 * The frequency (in seconds) with which push statistics are updated in storage. All counts and content sums will be kept in memory until
309 * a batch update is done to storage at the specified interval. As a result, there might be slight inconsistencies in the stats until
310 * the update takes place. Setting a larger value for this property increases the chances for inconsistency. Setting a smaller value
311 * guarantees more regular updates, but will impact performance more significantly.
312 */
313 // Property : push.stats.update.frequency
314 private int pushStatsUpdateFrequency = 120;
315
316 /**
317 * The max. number of push statistics in the queue waiting to be sent for a batch update.
318 * If the queue has reached its max. size, it will block until the size of the queue goes down again.
319 */
320 // Property : push.stats.update.queuesize
321 private int pushStatsUpdateQueueSize = 100000;
322
323 /**
324 * Area from the push notifications url.
325 * Only required for production.
326 * Valid values are: na, ?
327 */
328 private String pushArea = "na";
329
330 /**
331 * Method to initialise this class
332 */
333 public void initialize(){
334 this.setApplicationId(getKmeProperties().getProperty("push.blackberry.appId"));
335 this.setEval(Boolean.valueOf(getKmeProperties().getProperty("push.blackberry.eval","true")));
336 }
337 /**
338 * Returns the base url for blackberry urls
339 * @return
340 */
341 private String getBasePpgUrl(){
342 if (this.ppgBaseUrl == null){
343 if (this.eval){
344 this.ppgBaseUrl = "https://"+this.cpid+".pushapi.eval.blackberry.com";
345 }
346 else{
347 this.ppgBaseUrl = "https://"+this.cpid+".pushapi.blackberry.com";
348 }
349 }
350 return ppgBaseUrl;
351 }
352
353 /**
354 * Returns the url which should be used by the native app to open a push notifications listener
355 * @return
356 */
357 public String getPushUrl(){
358 if (this.pushUrl == null){
359 if (this.eval){
360 this.pushUrl = "http://cpXXX.pushapi.eval.blackberry.com";
361 }
362 else{
363 this.pushUrl = "http://cp"+this.cpid+".pushapi." + this.pushArea + ".blackberry.com";
364 }
365 }
366 return this.pushUrl;
367
368 }
369
370 /**
371 *
372 * @return
373 */
374 public final String getBaseBdsUrl(){
375 throw new IllegalArgumentException("Method not implemented");
376 }
377
378 /**
379 *
380 * @return
381 */
382 public final String getBaseBesUrl(){
383 throw new IllegalArgumentException("Method not implemented");
384 }
385
386 /**
387 * @see {@link #acknowledgementMaxQueueSize}
388 */
389 public int getAcknowledgementMaxQueueSize(){
390 return this.acknowledgementMaxQueueSize;
391 }
392
393 /**
394 * @see {@link #acknowledgementMaxThreads}
395 */
396 public int getAcknowledgementMaxThreads(){
397 return this.acknowledgementMaxThreads;
398 }
399
400 /**
401 * @see {@link #acknowledgementBatchSize}
402 */
403 public int getAcknowledgementBatchSize() {
404 return this.acknowledgementBatchSize;
405 }
406
407 /**
408 * @see {@link #acknowledgementPushLookupRetryDelay}
409 */
410 public int getAcknowledgementPushLookupRetryDelay(){
411 return this.acknowledgementPushLookupRetryDelay;
412 }
413
414 /**
415 * @see {@link #databaseType}
416 */
417 public String getDatabaseType(){
418 return this.databaseType;
419 }
420
421 /**
422 * @see {@link #defaultDeliverBeforeTimestampOffset}
423 */
424 public long getDefaultDeliverBeforeTimestampOffset() {
425 return defaultDeliverBeforeTimestampOffset;
426 }
427
428 /**
429 * @see {@link #maxInClauseValues}
430 */
431 public int getMaxInClauseValues(){
432 return this.maxInClauseValues;
433 }
434
435 /**
436 * @see {@link #publicPpgAddress}
437 */
438 public String getPublicPpgAddress() {
439 return this.getBasePpgUrl() + this.publicPpgAddress;
440 }
441
442 /**
443 * @see {@link #enterprisePpgAddress}
444 */
445 public String getEnterprisePpgAddress(){
446 return this.getBaseBesUrl() + this.enterprisePpgAddress;
447 }
448
449
450 /**
451 * @see {@link #BDSPpgAddress}
452 */
453 public String getBDSPpgAddress(){
454 return this.getBaseBdsUrl() + this.BDSPpgAddress;
455 }
456
457 /**
458 * @see {@link #pushRequestDetailFindMaxResults}
459 */
460 public int getPushRequestDetailFindMaxResults() {
461 return this.pushRequestDetailFindMaxResults;
462 }
463
464 /**
465 * @see {@link #regeneratePushIdMaxAttempts}
466 */
467 public int getRegeneratePushIdMaxAttempts(){
468 return this.regeneratePushIdMaxAttempts;
469 }
470
471 /**
472 * @see {@link #subscriptionDeregistrationUrl}
473 */
474 public String getSubscriptionDeregistrationUrl(){
475 return this.getBasePpgUrl() + this.subscriptionDeregistrationUrl;
476 }
477
478 /**
479 * @see {@link #subscriptionFindMaxResults}
480 */
481 public int getSubscriptionFindMaxResults(){
482 return this.subscriptionFindMaxResults;
483 }
484
485 /**
486 * @see {@link #subscriptionMatchingMaxThreads}
487 */
488 public int getSubscriptionMatchingMaxThreads(){
489 return this.subscriptionMatchingMaxThreads;
490 }
491
492 /**
493 * @see {@link #subscriptionResumeUrl}
494 */
495 public String getSubscriptionResumeUrl(){
496 return this.getBasePpgUrl() + this.subscriptionResumeUrl;
497 }
498
499 /**
500 * @see {@link #subscriptionSuspendUrl}
501 */
502 public String getSubscriptionSuspendUrl(){
503 return this.getBasePpgUrl() + this.subscriptionSuspendUrl;
504 }
505
506 /**
507 * @see {@link #subscriptionValidationBatchSize}
508 */
509 public int getSubscriptionValidationBatchSize() {
510 return this.subscriptionValidationBatchSize;
511 }
512
513 /**
514 * @see {@link #subscriptionValidationHighWaterMark}
515 */
516 public int getSubscriptionValidationHighWaterMark() {
517 return this.subscriptionValidationHighWaterMark;
518 }
519
520 /**
521 * @see {@link #acknowledgementMaxQueueSize}
522 */
523 public void setAcknowledgementMaxQueueSize(int value){
524 this.acknowledgementMaxQueueSize = value;
525 }
526
527 /**
528 * @see {@link #acknowledgementMaxThreads}
529 */
530 public void setAcknowledgementMaxThreads(int value){
531 this.acknowledgementMaxThreads = value;
532 }
533
534 /**
535 * @see {@link #acknowledgementBatchSize}
536 */
537 public void setAcknowledgementBatchSize(int value){
538 this.acknowledgementBatchSize = value;
539 }
540
541 public boolean isEval() {
542 return this.eval;
543 }
544
545 public void setEval(boolean isEval) {
546 this.eval = isEval;
547 }
548
549 public String getCpid() {
550 return cpid;
551 }
552
553 public void setApplicationId(String appID) {
554 if(!StringUtils.isEmpty(appID)) {
555 final char cHYPHEN = '-';
556 if( appID.indexOf( cHYPHEN ) > -1 ) {
557 this.cpid = appID.substring(0, appID.indexOf(cHYPHEN));
558 }
559 this.applicationId = appID;
560 }
561 }
562
563 public String getApplicationId(){
564 return this.applicationId;
565 }
566
567 /**
568 * @see {@link #acknowledgementPushLookupRetryDelay}
569 */
570 public void setAcknowledgementPushLookupRetryDelay(int value) {
571 this.acknowledgementPushLookupRetryDelay = value;
572 }
573
574 /**
575 * @see {@link #databaseType}
576 */
577 public void setDatabaseType(String value) {
578 this.databaseType = value;
579 }
580
581 /**
582 * @see {@link #defaultDeliverBeforeTimestampOffset}
583 */
584 public void setDefaultDeliverBeforeTimestampOffset(long value) {
585 this.defaultDeliverBeforeTimestampOffset = value;
586 }
587
588 /**
589 * @see {@link #maxInClauseValues}
590 */
591 public void setMaxInClauseValues(int value) {
592 this.maxInClauseValues = value;
593 }
594
595 /**
596 * @see {@link #publicPpgAddress}
597 */
598 public void setPublicPpgAddress(String value) {
599 this.publicPpgAddress = value;
600 }
601
602 /**
603 * @see {@link #enterprisePpgAddress}
604 */
605 public void setEnterprisePpgAddress(String value){
606 this.enterprisePpgAddress = value;
607 }
608
609 /**
610 * @see {@link #BDSPpgAddress}
611 */
612 public void setBDSPpgAddress(String value) {
613 this.BDSPpgAddress = value;
614 }
615
616 /**
617 * @see {@link #pushRequestDetailFindMaxResults}
618 */
619 public void setPushRequestDetailFindMaxResults(int value) {
620 this.pushRequestDetailFindMaxResults = value;
621 }
622
623 /**
624 * @see {@link #regeneratePushIdMaxAttempts}
625 */
626 public void setRegeneratePushIdMaxAttempts(int value) {
627 this.regeneratePushIdMaxAttempts = value;
628 }
629
630 /**
631 * @see {@link #subscriptionDeregistrationUrl}
632 */
633 public void setSubscriptionDeregistrationUrl(String value) {
634 this.subscriptionDeregistrationUrl = value;
635 }
636
637 /**
638 * @see {@link #subscriptionFindMaxResults}
639 */
640 public void setSubscriptionFindMaxResults(int value) {
641 this.subscriptionFindMaxResults = value;
642 }
643
644 /**
645 * @see {@link #subscriptionMatchingMaxThreads}
646 */
647 public void setSubscriptionMatchingMaxThreads(int value) {
648 this.subscriptionMatchingMaxThreads = value;
649 }
650
651 /**
652 * @see {@link #subscriptionResumeUrl}
653 */
654 public void setSubscriptionResumeUrl(String value) {
655 this.subscriptionResumeUrl = value;
656 }
657
658 /**
659 * @see {@link #subscriptionSuspendUrl}
660 */
661 public void setSubscriptionSuspendUrl(String value) {
662 this.subscriptionSuspendUrl = value;
663 }
664
665 /**
666 * @see {@link #subscriptionValidationBatchSize}
667 */
668 public void setSubscriptionValidationBatchSize(int value){
669 if (value <= 0){
670 this.subscriptionValidationBatchSize = 1;
671 }else{
672 this.subscriptionValidationBatchSize = value;
673 }
674 }
675
676 /**
677 * @see {@link #subscriptionValidationHighWaterMark}
678 */
679 public void setSubscriptionValidationHighWaterMark(int value) {
680 this.subscriptionValidationHighWaterMark = value;
681 }
682
683 /**
684 * @see {@link #httpConnectionTimeout}
685 */
686 public int getHttpConnectionTimeout() {
687 return this.httpConnectionTimeout;
688 }
689
690 /**
691 * @see {@link #httpIsPersistent}
692 */
693 public boolean getHttpIsPersistent() {
694 return this.httpIsPersistent;
695 }
696
697 /**
698 * @see {@link #httpReadTimeout}
699 */
700 public int getHttpReadTimeout() {
701 return httpReadTimeout;
702 }
703
704 /**
705 * @see {@link #httpConnectionTimeout}
706 */
707 public void setHttpConnectionTimeout(int value) {
708 this.httpConnectionTimeout = value;
709 }
710
711 /**
712 * @see {@link #httpIsPersistent}
713 */
714 public void setHttpIsPersistent(boolean value) {
715 this.httpIsPersistent = value;
716 }
717
718 /**
719 * @see {@link #httpReadTimeout}
720 */
721 public void setHttpReadTimeout(int value){
722 this.httpReadTimeout = value;
723 }
724
725 /**
726 * @see {@link #pushAppDeleteUnsubscribeQueueSize}
727 */
728 public int getPushAppDeleteUnsubscribeQueueSize(){
729 return this.pushAppDeleteUnsubscribeQueueSize;
730 }
731
732 /**
733 * @see {@link #pushAppDeleteUnsubscribeQueueSize}
734 */
735 public void setPushAppDeleteUnsubscribeQueueSize(int size){
736 this.pushAppDeleteUnsubscribeQueueSize = size;
737 }
738
739 /**
740 * @see {@link #pushAppDeleteUnsubscribeTimeout}
741 */
742 public int getPushAppDeleteUnsubscribeTimeout(){
743 return this.pushAppDeleteUnsubscribeTimeout;
744 }
745
746 /**
747 * @see {@link #pushAppDeleteUnsubscribeTimeout}
748 */
749 public void setPushAppDeleteUnsubscribeTimeout(int timeout){
750 this.pushAppDeleteUnsubscribeTimeout = timeout;
751 }
752
753 /**
754 * @see {@link #pushAppSubscriberDeleteTimeout}
755 */
756 public int getPushAppSubscriberDeleteTimeout(){
757 return this.pushAppSubscriberDeleteTimeout;
758 }
759
760 /**
761 * @see {@link #pushAppSubscriberDeleteTimeout}
762 */
763 public void setPushAppSubscriberDeleteTimeout(int timeout){
764 this.pushAppSubscriberDeleteTimeout = timeout;
765 }
766
767 /**
768 * @see {@link #subscriptionMatchingQueueSize}
769 */
770 public int getSubscriptionMatchingQueueSize() {
771 return this.subscriptionMatchingQueueSize;
772 }
773
774 /**
775 * @see {@link #subscriptionMatchingQueueSize}
776 */
777 public void setSubscriptionMatchingQueueSize(int size) {
778 this.subscriptionMatchingQueueSize = size;
779 }
780
781 /**
782 * @see {@link #subscriptionPPGSyncBatchSize}
783 */
784 public int getSubscriptionPPGSyncBatchSize(){
785 return this.subscriptionPPGSyncBatchSize;
786 }
787
788 /**
789 * @see {@link #subscriptionPPGSyncBatchSize}
790 */
791 public void setSubscriptionPPGSyncBatchSize(int size){
792 this.subscriptionPPGSyncBatchSize = size;
793 }
794
795 /**
796 * @see {@link #subscriptionQueryUrl}
797 */
798 public String getSubscriptionQueryUrl(){
799 return this.getBasePpgUrl() + this.subscriptionQueryUrl;
800 }
801
802 /**
803 * @see {@link #subscriptionQueryUrl}
804 */
805 public void setSubscriptionQueryUrl(String url){
806 this.subscriptionQueryUrl = url;
807 }
808
809 /**
810 * @see {@link #subscriptionPPGSyncQueueSize}
811 */
812 public int getSubscriptionPPGSyncQueueSize(){
813 return this.subscriptionPPGSyncQueueSize;
814 }
815
816 /**
817 * @see {@link #subscriptionPPGSyncQueueSize}
818 */
819 public void setSubscriptionPPGSyncQueueSize(int size){
820 this.subscriptionPPGSyncQueueSize = size;
821 }
822
823 /**
824 * @see {@link #subscriptionPPGSyncTimeout}
825 */
826 public int getSubscriptionPPGSyncTimeout() {
827 return this.subscriptionPPGSyncTimeout;
828 }
829
830 /**
831 * @see {@link #subscriptionPPGSyncTimeout}
832 */
833 public void setSubscriptionPPGSyncTimeout(int timeout){
834 this.subscriptionPPGSyncTimeout = timeout;
835 }
836
837
838 /**
839 * @see {@link #parserSpecialCharacters}
840 */
841 public char[] getParserSpecialCharacters(){
842 return this.parserSpecialCharacters;
843 }
844
845 /**
846 * @see {@link #subscriptionPPGSyncMaxThreads}
847 */
848 public void setParserSpecialCharacters(char[] value){
849 if(value != null){
850 this.parserSpecialCharacters = value.clone();
851 // this.parserSpecialCharacters = value;
852 }
853 }
854
855 /**
856 * @see {@link #subscriptionPPGSyncMaxThreads}
857 */
858 public int getSubscriptionPPGSyncMaxThreads() {
859 return this.subscriptionPPGSyncMaxThreads;
860 }
861
862 /**
863 * @see {@link #subscriptionPPGSyncMaxThreads}
864 */
865 public void setSubscriptionPPGSyncMaxThreads(int value){
866 this.subscriptionPPGSyncMaxThreads = value;
867 }
868
869 /**
870 * @see {@link #pushStatsUpdateFrequency}
871 */
872 public int getPushStatsUpdateFrequency(){
873 return this.pushStatsUpdateFrequency;
874 }
875
876 /**
877 * @see {@link #pushStatsUpdateFrequency}
878 */
879 public void setPushStatsUpdateFrequency(int value){
880 this.pushStatsUpdateFrequency = value;
881 }
882
883 /**
884 * @see {@link #pushStatsUpdateQueueSize}
885 */
886 public int getPushStatsUpdateQueueSize(){
887 return this.pushStatsUpdateQueueSize;
888 }
889
890 /**
891 * @see {@link #pushStatsUpdateQueueSize}
892 */
893 public void setPushStatsUpdateQueueSize(int value){
894 this.pushStatsUpdateQueueSize = value;
895 }
896
897 /**
898 * @see {@link #dtdDeclarationPublic}
899 */
900 public String getDtdDeclarationPublic(){
901 return this.dtdDeclarationPublic;
902 }
903
904 /**
905 * @see {@link #dtdDeclarationPublic}
906 */
907 public void setDtdDeclarationPublic(String value){
908 this.dtdDeclarationPublic = value;
909 }
910
911
912 /**
913 * @see {@link #dtdDeclarationEnterprise}
914 */
915 public String getDtdDeclarationEnterprise(){
916 return this.dtdDeclarationEnterprise;
917 }
918
919 /**
920 * @see {@link #dtdDeclarationEnterprise}
921 */
922 public void setDtdDeclarationEnterprise(String value){
923 this.dtdDeclarationEnterprise = value;
924 }
925
926 /**
927 * @return the kmeProperties
928 */
929 public Properties getKmeProperties() {
930 return kmeProperties;
931 }
932
933 /**
934 * @param kmeProperties the kmeProperties to set
935 */
936 public void setKmeProperties(Properties kmeProperties) {
937 this.kmeProperties = kmeProperties;
938 }
939 }