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 final 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 if( appID.indexOf( "-" ) > -1 ) {
556 this.cpid = appID.substring(0, appID.indexOf("-"));
557 }
558 this.applicationId = appID;
559 }
560 }
561
562 public String getApplicationId(){
563 return this.applicationId;
564 }
565
566 /**
567 * @see {@link #acknowledgementPushLookupRetryDelay}
568 */
569 public void setAcknowledgementPushLookupRetryDelay(int value) {
570 this.acknowledgementPushLookupRetryDelay = value;
571 }
572
573 /**
574 * @see {@link #databaseType}
575 */
576 public void setDatabaseType(String value) {
577 this.databaseType = value;
578 }
579
580 /**
581 * @see {@link #defaultDeliverBeforeTimestampOffset}
582 */
583 public void setDefaultDeliverBeforeTimestampOffset(long value) {
584 this.defaultDeliverBeforeTimestampOffset = value;
585 }
586
587 /**
588 * @see {@link #maxInClauseValues}
589 */
590 public void setMaxInClauseValues(int value) {
591 this.maxInClauseValues = value;
592 }
593
594 /**
595 * @see {@link #publicPpgAddress}
596 */
597 public void setPublicPpgAddress(String value) {
598 this.publicPpgAddress = value;
599 }
600
601 /**
602 * @see {@link #enterprisePpgAddress}
603 */
604 public void setEnterprisePpgAddress(String value){
605 this.enterprisePpgAddress = value;
606 }
607
608 /**
609 * @see {@link #BDSPpgAddress}
610 */
611 public void setBDSPpgAddress(String value) {
612 this.BDSPpgAddress = value;
613 }
614
615 /**
616 * @see {@link #pushRequestDetailFindMaxResults}
617 */
618 public void setPushRequestDetailFindMaxResults(int value) {
619 this.pushRequestDetailFindMaxResults = value;
620 }
621
622 /**
623 * @see {@link #regeneratePushIdMaxAttempts}
624 */
625 public void setRegeneratePushIdMaxAttempts(int value) {
626 this.regeneratePushIdMaxAttempts = value;
627 }
628
629 /**
630 * @see {@link #subscriptionDeregistrationUrl}
631 */
632 public void setSubscriptionDeregistrationUrl(String value) {
633 this.subscriptionDeregistrationUrl = value;
634 }
635
636 /**
637 * @see {@link #subscriptionFindMaxResults}
638 */
639 public void setSubscriptionFindMaxResults(int value) {
640 this.subscriptionFindMaxResults = value;
641 }
642
643 /**
644 * @see {@link #subscriptionMatchingMaxThreads}
645 */
646 public void setSubscriptionMatchingMaxThreads(int value) {
647 this.subscriptionMatchingMaxThreads = value;
648 }
649
650 /**
651 * @see {@link #subscriptionResumeUrl}
652 */
653 public void setSubscriptionResumeUrl(String value) {
654 this.subscriptionResumeUrl = value;
655 }
656
657 /**
658 * @see {@link #subscriptionSuspendUrl}
659 */
660 public void setSubscriptionSuspendUrl(String value) {
661 this.subscriptionSuspendUrl = value;
662 }
663
664 /**
665 * @see {@link #subscriptionValidationBatchSize}
666 */
667 public void setSubscriptionValidationBatchSize(int value){
668 if (value <= 0){
669 value = 1;
670 }
671 this.subscriptionValidationBatchSize = value;
672 }
673
674 /**
675 * @see {@link #subscriptionValidationHighWaterMark}
676 */
677 public void setSubscriptionValidationHighWaterMark(int value) {
678 this.subscriptionValidationHighWaterMark = value;
679 }
680
681 /**
682 * @see {@link #httpConnectionTimeout}
683 */
684 public int getHttpConnectionTimeout() {
685 return this.httpConnectionTimeout;
686 }
687
688 /**
689 * @see {@link #httpIsPersistent}
690 */
691 public boolean getHttpIsPersistent() {
692 return this.httpIsPersistent;
693 }
694
695 /**
696 * @see {@link #httpReadTimeout}
697 */
698 public int getHttpReadTimeout() {
699 return httpReadTimeout;
700 }
701
702 /**
703 * @see {@link #httpConnectionTimeout}
704 */
705 public void setHttpConnectionTimeout(int value) {
706 this.httpConnectionTimeout = value;
707 }
708
709 /**
710 * @see {@link #httpIsPersistent}
711 */
712 public void setHttpIsPersistent(boolean value) {
713 this.httpIsPersistent = value;
714 }
715
716 /**
717 * @see {@link #httpReadTimeout}
718 */
719 public void setHttpReadTimeout(int value){
720 this.httpReadTimeout = value;
721 }
722
723 /**
724 * @see {@link #pushAppDeleteUnsubscribeQueueSize}
725 */
726 public int getPushAppDeleteUnsubscribeQueueSize(){
727 return this.pushAppDeleteUnsubscribeQueueSize;
728 }
729
730 /**
731 * @see {@link #pushAppDeleteUnsubscribeQueueSize}
732 */
733 public void setPushAppDeleteUnsubscribeQueueSize(int size){
734 this.pushAppDeleteUnsubscribeQueueSize = size;
735 }
736
737 /**
738 * @see {@link #pushAppDeleteUnsubscribeTimeout}
739 */
740 public int getPushAppDeleteUnsubscribeTimeout(){
741 return this.pushAppDeleteUnsubscribeTimeout;
742 }
743
744 /**
745 * @see {@link #pushAppDeleteUnsubscribeTimeout}
746 */
747 public void setPushAppDeleteUnsubscribeTimeout(int timeout){
748 this.pushAppDeleteUnsubscribeTimeout = timeout;
749 }
750
751 /**
752 * @see {@link #pushAppSubscriberDeleteTimeout}
753 */
754 public int getPushAppSubscriberDeleteTimeout(){
755 return this.pushAppSubscriberDeleteTimeout;
756 }
757
758 /**
759 * @see {@link #pushAppSubscriberDeleteTimeout}
760 */
761 public void setPushAppSubscriberDeleteTimeout(int timeout){
762 this.pushAppSubscriberDeleteTimeout = timeout;
763 }
764
765 /**
766 * @see {@link #subscriptionMatchingQueueSize}
767 */
768 public int getSubscriptionMatchingQueueSize() {
769 return this.subscriptionMatchingQueueSize;
770 }
771
772 /**
773 * @see {@link #subscriptionMatchingQueueSize}
774 */
775 public void setSubscriptionMatchingQueueSize(int size) {
776 this.subscriptionMatchingQueueSize = size;
777 }
778
779 /**
780 * @see {@link #subscriptionPPGSyncBatchSize}
781 */
782 public int getSubscriptionPPGSyncBatchSize(){
783 return this.subscriptionPPGSyncBatchSize;
784 }
785
786 /**
787 * @see {@link #subscriptionPPGSyncBatchSize}
788 */
789 public void setSubscriptionPPGSyncBatchSize(int size){
790 this.subscriptionPPGSyncBatchSize = size;
791 }
792
793 /**
794 * @see {@link #subscriptionQueryUrl}
795 */
796 public String getSubscriptionQueryUrl(){
797 return this.getBasePpgUrl() + this.subscriptionQueryUrl;
798 }
799
800 /**
801 * @see {@link #subscriptionQueryUrl}
802 */
803 public void setSubscriptionQueryUrl(String url){
804 this.subscriptionQueryUrl = url;
805 }
806
807 /**
808 * @see {@link #subscriptionPPGSyncQueueSize}
809 */
810 public int getSubscriptionPPGSyncQueueSize(){
811 return this.subscriptionPPGSyncQueueSize;
812 }
813
814 /**
815 * @see {@link #subscriptionPPGSyncQueueSize}
816 */
817 public void setSubscriptionPPGSyncQueueSize(int size){
818 this.subscriptionPPGSyncQueueSize = size;
819 }
820
821 /**
822 * @see {@link #subscriptionPPGSyncTimeout}
823 */
824 public int getSubscriptionPPGSyncTimeout() {
825 return this.subscriptionPPGSyncTimeout;
826 }
827
828 /**
829 * @see {@link #subscriptionPPGSyncTimeout}
830 */
831 public void setSubscriptionPPGSyncTimeout(int timeout){
832 this.subscriptionPPGSyncTimeout = timeout;
833 }
834
835
836 /**
837 * @see {@link #parserSpecialCharacters}
838 */
839 public char[] getParserSpecialCharacters(){
840 return this.parserSpecialCharacters;
841 }
842
843 /**
844 * @see {@link #subscriptionPPGSyncMaxThreads}
845 */
846 public void setParserSpecialCharacters(char[] value){
847 this.parserSpecialCharacters = value;
848 }
849
850 /**
851 * @see {@link #subscriptionPPGSyncMaxThreads}
852 */
853 public int getSubscriptionPPGSyncMaxThreads() {
854 return this.subscriptionPPGSyncMaxThreads;
855 }
856
857 /**
858 * @see {@link #subscriptionPPGSyncMaxThreads}
859 */
860 public void setSubscriptionPPGSyncMaxThreads(int value){
861 this.subscriptionPPGSyncMaxThreads = value;
862 }
863
864 /**
865 * @see {@link #pushStatsUpdateFrequency}
866 */
867 public int getPushStatsUpdateFrequency(){
868 return this.pushStatsUpdateFrequency;
869 }
870
871 /**
872 * @see {@link #pushStatsUpdateFrequency}
873 */
874 public void setPushStatsUpdateFrequency(int value){
875 this.pushStatsUpdateFrequency = value;
876 }
877
878 /**
879 * @see {@link #pushStatsUpdateQueueSize}
880 */
881 public int getPushStatsUpdateQueueSize(){
882 return this.pushStatsUpdateQueueSize;
883 }
884
885 /**
886 * @see {@link #pushStatsUpdateQueueSize}
887 */
888 public void setPushStatsUpdateQueueSize(int value){
889 this.pushStatsUpdateQueueSize = value;
890 }
891
892 /**
893 * @see {@link #dtdDeclarationPublic}
894 */
895 public String getDtdDeclarationPublic(){
896 return this.dtdDeclarationPublic;
897 }
898
899 /**
900 * @see {@link #dtdDeclarationPublic}
901 */
902 public void setDtdDeclarationPublic(String value){
903 this.dtdDeclarationPublic = value;
904 }
905
906
907 /**
908 * @see {@link #dtdDeclarationEnterprise}
909 */
910 public String getDtdDeclarationEnterprise(){
911 return this.dtdDeclarationEnterprise;
912 }
913
914 /**
915 * @see {@link #dtdDeclarationEnterprise}
916 */
917 public void setDtdDeclarationEnterprise(String value){
918 this.dtdDeclarationEnterprise = value;
919 }
920
921 /**
922 * @return the kmeProperties
923 */
924 public Properties getKmeProperties() {
925 return kmeProperties;
926 }
927
928 /**
929 * @param kmeProperties the kmeProperties to set
930 */
931 public void setKmeProperties(Properties kmeProperties) {
932 this.kmeProperties = kmeProperties;
933 }
934 }