| 1 | package fr.sii.ogham.email.sendgrid.v4.builder.sendgrid; | |
| 2 | ||
| 3 | import java.net.URL; | |
| 4 | ||
| 5 | import org.apache.http.client.HttpClient; | |
| 6 | import org.apache.http.impl.client.CloseableHttpClient; | |
| 7 | import org.slf4j.Logger; | |
| 8 | import org.slf4j.LoggerFactory; | |
| 9 | ||
| 10 | import com.sendgrid.Client; | |
| 11 | import com.sendgrid.SendGrid; | |
| 12 | ||
| 13 | import fr.sii.ogham.core.builder.MessagingBuilder; | |
| 14 | import fr.sii.ogham.core.builder.configuration.ConfigurationValueBuilder; | |
| 15 | import fr.sii.ogham.core.builder.configuration.ConfigurationValueBuilderHelper; | |
| 16 | import fr.sii.ogham.core.builder.configurer.Configurer; | |
| 17 | import fr.sii.ogham.core.builder.context.BuildContext; | |
| 18 | import fr.sii.ogham.core.builder.context.DefaultBuildContext; | |
| 19 | import fr.sii.ogham.core.message.content.MayHaveStringContent; | |
| 20 | import fr.sii.ogham.core.message.content.MultiContent; | |
| 21 | import fr.sii.ogham.core.mimetype.MimeTypeProvider; | |
| 22 | import fr.sii.ogham.email.builder.EmailBuilder; | |
| 23 | import fr.sii.ogham.email.message.Email; | |
| 24 | import fr.sii.ogham.email.message.content.ContentWithAttachments; | |
| 25 | import fr.sii.ogham.email.sendgrid.builder.AbstractSendGridBuilder; | |
| 26 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.SendGridV4Sender; | |
| 27 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.client.CustomizableUrlClient; | |
| 28 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.client.DelegateSendGridClient; | |
| 29 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.client.SendGridClient; | |
| 30 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.client.SendGridInterceptor; | |
| 31 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.compat.CompatUtil; | |
| 32 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.handler.ContentWithAttachmentsHandler; | |
| 33 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.handler.MultiContentHandler; | |
| 34 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.handler.PriorizedContentHandler; | |
| 35 | import fr.sii.ogham.email.sendgrid.v4.sender.impl.sendgrid.handler.StringContentHandler; | |
| 36 | ||
| 37 | /** | |
| 38 | * Configures how SendGrid implementation will send {@link Email}s. | |
| 39 | * | |
| 40 | * This implementation uses SendGrid HTTP API. | |
| 41 | * | |
| 42 | *
 | |
| 43 | * To send {@link Email} using SendGrid, you need to register this builder into | |
| 44 | * a {@link MessagingBuilder} like this: | |
| 45 | * | |
| 46 | *
 | |
| 47 | *  | |
| 48 | * MessagingBuilder msgBuilder = ... | |
| 49 | * msgBuilder.email() | |
| 50 | * .sender(SendGridV4Builder.class) // registers the builder and accesses to that builder for configuring it | |
| 51 | *  | |
| 52 | *
 | |
| 53 | * | |
| 54 | * Once the builder is registered, sending email through SendGrid requires | |
| 55 | * either an API key or a username/password pair. You can define it using: | |
| 56 | * | |
| 57 | *
 | |
| 58 | *  | |
| 59 | * msgBuilder.email() | |
| 60 | * .sender(SendGridV4Builder.class) // registers the builder and accesses to that builder for configuring it | |
| 61 | * .apiKey("foo") | |
| 62 | *  | |
| 63 | *
 | |
| 64 | * | |
| 65 | * Or you can also use property keys (using interpolation): | |
| 66 | * | |
| 67 | *
 | |
| 68 | *  | |
| 69 | * msgBuilder | |
| 70 | * .environment() | |
| 71 | * .properties() | |
| 72 | * .set("custom.property.for.api-key", "foo") | |
| 73 | * .and() | |
| 74 | * .and() | |
| 75 | * .email() | |
| 76 | * .sender(SendGridV4Builder.class) // registers the builder and accesses to that builder for configuring it | |
| 77 | * .apiKey("${custom.property.for.api-key}") | |
| 78 | *  | |
| 79 | *
 | |
| 80 | * | |
| 81 | *
 | |
| 82 | * Finally, Ogham will transform general {@link Email} object into | |
| 83 | * {@link SendGrid}.Email object. This transformation will fit almost all use | |
| 84 | * cases but you may need to customize a part of the SendGrid message. Instead | |
| 85 | * of doing again the same work Ogham does, this builder allows you to intercept | |
| 86 | * the message to modify it just before sending it: | |
| 87 | * | |
| 88 | *
 | |
| 89 | *  | |
| 90 | * .sender(SendGridV4Builder.class) | |
| 91 | * .intercept(new MyCustomInterceptor()) | |
| 92 | *  | |
| 93 | *
 | |
| 94 | * | |
| 95 | * See {@link SendGridInterceptor} for more information. | |
| 96 | * | |
| 97 | * @author Aurélien Baudet | |
| 98 | * | |
| 99 | */ | |
| 100 | public class SendGridV4Builder extends AbstractSendGridBuilder<SendGridV4Builder, EmailBuilder> { | |
| 101 | private static final Logger LOG = LoggerFactory.getLogger(SendGridV4Builder.class); | |
| 102 | ||
| 103 | private SendGridClient client; | |
| 104 | private SendGridInterceptor interceptor; | |
| 105 | private Client clientHelper; | |
| 106 | private final ConfigurationValueBuilderHelper<SendGridV4Builder, Boolean> unitTestingValueBuilder; | |
| 107 | ||
| 108 | /** | |
| 109 | * Default constructor when using SendGrid sender without all Ogham work. | |
| 110 | * | |
| 111 | * WARNING: use is only if you know what you are doing ! | |
| 112 | */ | |
| 113 | public SendGridV4Builder() { | |
| 114 | this(null, new DefaultBuildContext()); | |
| 115 | } | |
| 116 | ||
| 117 | /** | |
| 118 | * Constructor that is called when using Ogham builder: | |
| 119 | * | |
| 120 | *
 | |
| 121 | * MessagingBuilder msgBuilder = ... | |
| 122 | * msgBuilder | |
| 123 | * .email() | |
| 124 | * .sender(SendGridV4Builder.class) | |
| 125 | *
 | |
| 126 | * | |
| 127 | * @param parent | |
| 128 | * the parent builder instance for fluent chaining | |
| 129 | * @param buildContext | |
| 130 | * for registering instances and property evaluation | |
| 131 | */ | |
| 132 | public SendGridV4Builder(EmailBuilder parent, BuildContext buildContext) { | |
| 133 | super(SendGridV4Builder.class, parent, buildContext); | |
| 134 | unitTestingValueBuilder = buildContext.newConfigurationValueBuilder(this, Boolean.class); | |
| 135 | } | |
| 136 | ||
| 137 | /** | |
| 138 | * @deprecated SendGrid v4 doesn't use username/password anymore. You must | |
| 139 | * use an {@link #apiKey(String)}. | |
| 140 | */ | |
| 141 | @Deprecated | |
| 142 | @Override | |
| 143 | public SendGridV4Builder username(String username) { | |
| 144 | LOG.warn("username and password are no more available with SendGrid v4"); | |
| 145 |
1
1. username : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::username → RUN_ERROR |
return this; |
| 146 | } | |
| 147 | ||
| 148 | /** | |
| 149 | * @deprecated SendGrid v4 doesn't use username/password anymore. You must | |
| 150 | * use an {@link #apiKey(String)}. | |
| 151 | */ | |
| 152 | @Deprecated | |
| 153 | @Override | |
| 154 | public ConfigurationValueBuilder<SendGridV4Builder, String> username() { | |
| 155 | LOG.warn("username and password are no more available with SendGrid v4"); | |
| 156 |
1
1. username : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::username → NO_COVERAGE |
return buildContext.newConfigurationValueBuilder(this, String.class); |
| 157 | } | |
| 158 | ||
| 159 | /** | |
| 160 | * @deprecated SendGrid v4 doesn't use username/password anymore. You must | |
| 161 | * use an {@link #apiKey(String)}. | |
| 162 | */ | |
| 163 | @Deprecated | |
| 164 | @Override | |
| 165 | public SendGridV4Builder password(String password) { | |
| 166 | LOG.warn("username and password are no more available with SendGrid v4"); | |
| 167 |
1
1. password : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::password → RUN_ERROR |
return this; |
| 168 | } | |
| 169 | ||
| 170 | /** | |
| 171 | * @deprecated SendGrid v4 doesn't use username/password anymore. You must | |
| 172 | * use an {@link #apiKey(String)}. | |
| 173 | */ | |
| 174 | @Deprecated | |
| 175 | @Override | |
| 176 | public ConfigurationValueBuilder<SendGridV4Builder, String> password() { | |
| 177 | LOG.warn("username and password are no more available with SendGrid v4"); | |
| 178 |
1
1. password : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::password → NO_COVERAGE |
return buildContext.newConfigurationValueBuilder(this, String.class); |
| 179 | } | |
| 180 | ||
| 181 | /** | |
| 182 | * SendGrid allows to call API for unit tests. Set this to true if you are | |
| 183 | * unit testing. | |
| 184 | * | |
| 185 | *
 | |
| 186 | * The value set using this method takes precedence over any property and | |
| 187 | * default value configured using {@link #unitTesting()}. | |
| 188 | * | |
| 189 | *
 | |
| 190 | * .unitTesting(true) | |
| 191 | * .unitTesting() | |
| 192 | * .properties("${custom.property.high-priority}", "${custom.property.low-priority}") | |
| 193 | * .defaultValue(false) | |
| 194 | *
 | |
| 195 | * | |
| 196 | *
 | |
| 197 | * .unitTesting(true) | |
| 198 | * .unitTesting() | |
| 199 | * .properties("${custom.property.high-priority}", "${custom.property.low-priority}") | |
| 200 | * .defaultValue(false) | |
| 201 | *
 | |
| 202 | * | |
| 203 | * In both cases, {@code unitTesting(true)} is used. | |
| 204 | * | |
| 205 | *
 | |
| 206 | * If this method is called several times, only the last value is used. | |
| 207 | * | |
| 208 | *
 | |
| 209 | * If {@code null} value is set, it is like not setting a value at all. The | |
| 210 | * property/default value configuration is applied. | |
| 211 | * | |
| 212 | * @param unitTesting | |
| 213 | * true to use SendGrid in unit testing mode | |
| 214 | * @return this instance for fluent chaining | |
| 215 | */ | |
| 216 | public SendGridV4Builder unitTesting(Boolean unitTesting) { | |
| 217 |
1
1. unitTesting : removed call to fr/sii/ogham/core/builder/configuration/ConfigurationValueBuilderHelper::setValue → NO_COVERAGE |
unitTestingValueBuilder.setValue(unitTesting); |
| 218 |
1
1. unitTesting : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::unitTesting → NO_COVERAGE |
return this; |
| 219 | } | |
| 220 | ||
| 221 | /** | |
| 222 | * SendGrid allows to call API for unit tests. Set this to true if you are | |
| 223 | * unit testing. | |
| 224 | * | |
| 225 | *
 | |
| 226 | * This method is mainly used by {@link Configurer}s to register some | |
| 227 | * property keys and/or a default value. The aim is to let developer be able | |
| 228 | * to externalize its configuration (using system properties, configuration | |
| 229 | * file or anything else). If the developer doesn't configure any value for | |
| 230 | * the registered properties, the default value is used (if set). | |
| 231 | * | |
| 232 | *
 | |
| 233 | * .unitTesting() | |
| 234 | * .properties("${custom.property.high-priority}", "${custom.property.low-priority}") | |
| 235 | * .defaultValue(false) | |
| 236 | *
 | |
| 237 | * | |
| 238 | *
 | |
| 239 | * Non-null value set using {@link #unitTesting(Boolean)} takes precedence | |
| 240 | * over property values and default value. | |
| 241 | * | |
| 242 | *
 | |
| 243 | * .unitTesting(true) | |
| 244 | * .unitTesting() | |
| 245 | * .properties("${custom.property.high-priority}", "${custom.property.low-priority}") | |
| 246 | * .defaultValue(false) | |
| 247 | *
 | |
| 248 | * | |
| 249 | * The value {@code true} is used regardless of the value of the properties | |
| 250 | * and default value. | |
| 251 | * | |
| 252 | *
 | |
| 253 | * See {@link ConfigurationValueBuilder} for more information. | |
| 254 | * | |
| 255 | * | |
| 256 | * @return the builder to configure property keys/default value | |
| 257 | */ | |
| 258 | public ConfigurationValueBuilder<SendGridV4Builder, Boolean> unitTesting() { | |
| 259 |
1
1. unitTesting : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::unitTesting → RUN_ERROR |
return unitTestingValueBuilder; |
| 260 | } | |
| 261 | ||
| 262 | /** | |
| 263 | * By default, SendGrid uses a {@link Client} instance as an helper to | |
| 264 | * perform HTTP requests. You may want to use custom client configuration | |
| 265 | * such as providing custom protocol and port: | |
| 266 | * | |
| 267 | *
 | |
| 268 | * .client(new CustomizableUrlClient(false, "http", 8080)) | |
| 269 | *
 | |
| 270 | * | |
| 271 | * NOTE: if you provide a custom {@link Client}, the | |
| 272 | * {@link #unitTesting(Boolean)} or | |
| 273 | * {@link #httpClient(org.apache.http.impl.client.CloseableHttpClient)} | |
| 274 | * configurations are not used. You have to handle it manually. | |
| 275 | * | |
| 276 | * @param clientHelper | |
| 277 | * the custom client used to call SendGrid HTTP API | |
| 278 | * @return this instance for fluent chaining | |
| 279 | */ | |
| 280 | public SendGridV4Builder clientHelper(Client clientHelper) { | |
| 281 | this.clientHelper = clientHelper; | |
| 282 |
1
1. clientHelper : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::clientHelper → NO_COVERAGE |
return this; |
| 283 | } | |
| 284 | ||
| 285 | /** | |
| 286 | * By default, calling SendGrid HTTP API is done through the default | |
| 287 | * {@link SendGrid} implementation. If you want to use another client | |
| 288 | * implementation (creating your custom HTTP API caller for example), you | |
| 289 | * can implement the {@link SendGridClient} interface and provide it: | |
| 290 | * | |
| 291 | *
 | |
| 292 | * .client(new MyCustomHttpApiCaller()) | |
| 293 | *
 | |
| 294 | * | |
| 295 | * NOTE: if you provide your custom implementation, any defined properties | |
| 296 | * and values using {@link #apiKey(String)}, {@link #username(String)} or | |
| 297 | * {@link #password(String)} won't be used at all. You then have to handle | |
| 298 | * it by yourself. | |
| 299 | * | |
| 300 | * @param client | |
| 301 | * the custom client used to call SendGrid HTTP API | |
| 302 | * @return this instance for fluent chaining | |
| 303 | */ | |
| 304 | public SendGridV4Builder client(SendGridClient client) { | |
| 305 | this.client = client; | |
| 306 |
1
1. client : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::client → RUN_ERROR |
return this; |
| 307 | } | |
| 308 | ||
| 309 | /** | |
| 310 | * By default, calling SendGrid HTTP API is done through the default | |
| 311 | * {@link SendGrid} implementation that uses default {@link HttpClient} | |
| 312 | * (calling {@code HttpClientBuilder.create().build()}). If you want to use | |
| 313 | * another HTTP client implementation, you can extend the | |
| 314 | * {@link CloseableHttpClient} class and provide it: | |
| 315 | * | |
| 316 | *
 | |
| 317 | * .client(new MyCustomHttpClient()) | |
| 318 | *
 | |
| 319 | * | |
| 320 | * NOTE: if you provide your custom implementation, any defined properties | |
| 321 | * and values using {@link #unitTesting(Boolean)} won't be used at all. You | |
| 322 | * then have to handle it by yourself. | |
| 323 | * | |
| 324 | * @param httpClient | |
| 325 | * the custom implementation of {@link HttpClient} used to call | |
| 326 | * SendGrid HTTP API. SendGrid requires a | |
| 327 | * {@link CloseableHttpClient}. | |
| 328 | * @return this instance for fluent chaining | |
| 329 | */ | |
| 330 | @SuppressWarnings("squid:S1185") | |
| 331 | @Override | |
| 332 | public SendGridV4Builder httpClient(CloseableHttpClient httpClient) { | |
| 333 |
1
1. httpClient : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::httpClient → NO_COVERAGE |
return super.httpClient(httpClient); |
| 334 | } | |
| 335 | ||
| 336 | /** | |
| 337 | * Ogham will transform general {@link Email} object into | |
| 338 | * {@link SendGrid}.Email objects. This transformation will fit almost all | |
| 339 | * use cases but you may need to customize a part of the SendGrid message. | |
| 340 | * Instead of doing again the same work Ogham does, this builder allows you | |
| 341 | * to intercept the message to modify it just before sending it: | |
| 342 | * | |
| 343 | *
 | |
| 344 | * .sender(SendGridV4Builder.class) | |
| 345 | * .intercept(new MyCustomInterceptor()) | |
| 346 | *
 | |
| 347 | * | |
| 348 | * See {@link SendGridInterceptor} for more information. | |
| 349 | * | |
| 350 | * @param interceptor | |
| 351 | * the custom interceptor used to modify {@link SendGrid}.Email | |
| 352 | * @return this instance for fluent chaining | |
| 353 | */ | |
| 354 | public SendGridV4Builder intercept(SendGridInterceptor interceptor) { | |
| 355 | this.interceptor = interceptor; | |
| 356 |
1
1. intercept : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::intercept → NO_COVERAGE |
return this; |
| 357 | } | |
| 358 | ||
| 359 | @Override | |
| 360 | public SendGridV4Sender build() { | |
| 361 | String apiKey = apiKeyValueBuilder.getValue(); | |
| 362 | boolean test = unitTestingValueBuilder.getValue(false); | |
| 363 | URL url = urlValueBuilder.getValue(); | |
| 364 | SendGridClient builtClient = buildClient(apiKey, buildClientHelper(clientHelper, httpClient, test, url), url); | |
| 365 |
1
1. build : negated conditional → RUN_ERROR |
if (builtClient == null) { |
| 366 | return null; | |
| 367 | } | |
| 368 | LOG.info("Sending email using SendGrid API is registered"); | |
| 369 |
1
1. build : negated conditional → RUN_ERROR |
if (client == null) { |
| 370 | LOG.debug("SendGrid account: apiKey={}, test={}", apiKey, test); | |
| 371 | } else { | |
| 372 | LOG.debug("SendGrid instance provided so apiKey and unitTesting properties are not used"); | |
| 373 | } | |
| 374 |
1
1. build : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::build → RUN_ERROR |
return buildContext.register(new SendGridV4Sender(builtClient, buildContentHandler(), buildMimetypeProvider(), CompatUtil.getDefaultCompatFactory(), interceptor)); |
| 375 | } | |
| 376 | ||
| 377 | private Client buildClientHelper(Client clientHelper, CloseableHttpClient httpClient, boolean test, URL url) { | |
| 378 | // custom implementation | |
| 379 |
1
1. buildClientHelper : negated conditional → RUN_ERROR |
if (clientHelper != null) { |
| 380 |
1
1. buildClientHelper : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildClientHelper → NO_COVERAGE |
return clientHelper; |
| 381 | } | |
| 382 | // case where custom URL is set. | |
| 383 | // SendGrid Client doesn't support neither custom port nor custom | |
| 384 | // protocol | |
| 385 |
2
1. buildClientHelper : negated conditional → RUN_ERROR 2. buildClientHelper : negated conditional → RUN_ERROR |
if (url != null && httpClient != null) { |
| 386 |
1
1. buildClientHelper : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildClientHelper → NO_COVERAGE |
return buildContext.register(new CustomizableUrlClient(httpClient, url.getProtocol(), url.getPort())); |
| 387 | } | |
| 388 |
1
1. buildClientHelper : negated conditional → RUN_ERROR |
if (url != null) { |
| 389 |
1
1. buildClientHelper : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildClientHelper → RUN_ERROR |
return buildContext.register(new CustomizableUrlClient(test, url.getProtocol(), url.getPort())); |
| 390 | } | |
| 391 | // custom http client | |
| 392 |
1
1. buildClientHelper : negated conditional → RUN_ERROR |
if (httpClient != null) { |
| 393 |
1
1. buildClientHelper : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildClientHelper → NO_COVERAGE |
return buildContext.register(new Client(httpClient)); |
| 394 | } | |
| 395 | // test client (just to allow http instead of https) | |
| 396 |
1
1. buildClientHelper : negated conditional → RUN_ERROR |
if (test) { |
| 397 |
1
1. buildClientHelper : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildClientHelper → NO_COVERAGE |
return buildContext.register(new Client(true)); |
| 398 | } | |
| 399 | // use default Client implementation created directly by SendGrid | |
| 400 | return null; | |
| 401 | } | |
| 402 | ||
| 403 | private SendGridClient buildClient(String apiKey, Client client, URL url) { | |
| 404 |
1
1. buildClient : negated conditional → RUN_ERROR |
if (this.client != null) { |
| 405 |
1
1. buildClient : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildClient → RUN_ERROR |
return this.client; |
| 406 | } | |
| 407 |
1
1. buildClient : negated conditional → RUN_ERROR |
if (apiKey != null) { |
| 408 |
1
1. buildClient : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildClient → RUN_ERROR |
return buildContext.register(new DelegateSendGridClient(buildSendGrid(apiKey, client, url))); |
| 409 | } | |
| 410 | return null; | |
| 411 | } | |
| 412 | ||
| 413 | private SendGrid buildSendGrid(String apiKey, Client client, URL url) { | |
| 414 | SendGrid sendGrid = newSendGrid(apiKey, client); | |
| 415 |
1
1. buildSendGrid : negated conditional → RUN_ERROR |
if (url != null) { |
| 416 |
1
1. buildSendGrid : removed call to com/sendgrid/SendGrid::setHost → RUN_ERROR |
sendGrid.setHost(url.getHost()); |
| 417 | } | |
| 418 |
1
1. buildSendGrid : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildSendGrid → RUN_ERROR |
return sendGrid; |
| 419 | } | |
| 420 | ||
| 421 | private static SendGrid newSendGrid(String apiKey, Client client) { | |
| 422 |
1
1. newSendGrid : negated conditional → RUN_ERROR |
if (client != null) { |
| 423 |
1
1. newSendGrid : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::newSendGrid → RUN_ERROR |
return new SendGrid(apiKey, client); |
| 424 | } | |
| 425 |
1
1. newSendGrid : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::newSendGrid → RUN_ERROR |
return new SendGrid(apiKey); |
| 426 | } | |
| 427 | ||
| 428 | private PriorizedContentHandler buildContentHandler() { | |
| 429 | MimeTypeProvider mimetypeProvider = buildMimetypeProvider(); | |
| 430 | PriorizedContentHandler contentHandler = buildContext.register(new PriorizedContentHandler()); | |
| 431 |
1
1. buildContentHandler : removed call to fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/handler/PriorizedContentHandler::register → RUN_ERROR |
contentHandler.register(MultiContent.class, buildContext.register(new MultiContentHandler(contentHandler))); |
| 432 |
1
1. buildContentHandler : removed call to fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/handler/PriorizedContentHandler::register → RUN_ERROR |
contentHandler.register(ContentWithAttachments.class, buildContext.register(new ContentWithAttachmentsHandler(contentHandler))); |
| 433 |
1
1. buildContentHandler : removed call to fr/sii/ogham/email/sendgrid/v4/sender/impl/sendgrid/handler/PriorizedContentHandler::register → RUN_ERROR |
contentHandler.register(MayHaveStringContent.class, buildContext.register(new StringContentHandler(mimetypeProvider))); |
| 434 |
1
1. buildContentHandler : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildContentHandler → RUN_ERROR |
return contentHandler; |
| 435 | } | |
| 436 | ||
| 437 | private MimeTypeProvider buildMimetypeProvider() { | |
| 438 |
1
1. buildMimetypeProvider : negated conditional → RUN_ERROR |
if (mimetypeBuilder == null) { |
| 439 | return null; | |
| 440 | } | |
| 441 |
1
1. buildMimetypeProvider : replaced return value with null for fr/sii/ogham/email/sendgrid/v4/builder/sendgrid/SendGridV4Builder::buildMimetypeProvider → RUN_ERROR |
return mimetypeBuilder.build(); |
| 442 | } | |
| 443 | } | |
Mutations | ||
| 145 |
1.1 |
|
| 156 |
1.1 |
|
| 167 |
1.1 |
|
| 178 |
1.1 |
|
| 217 |
1.1 |
|
| 218 |
1.1 |
|
| 259 |
1.1 |
|
| 282 |
1.1 |
|
| 306 |
1.1 |
|
| 333 |
1.1 |
|
| 356 |
1.1 |
|
| 365 |
1.1 |
|
| 369 |
1.1 |
|
| 374 |
1.1 |
|
| 379 |
1.1 |
|
| 380 |
1.1 |
|
| 385 |
1.1 2.2 |
|
| 386 |
1.1 |
|
| 388 |
1.1 |
|
| 389 |
1.1 |
|
| 392 |
1.1 |
|
| 393 |
1.1 |
|
| 396 |
1.1 |
|
| 397 |
1.1 |
|
| 404 |
1.1 |
|
| 405 |
1.1 |
|
| 407 |
1.1 |
|
| 408 |
1.1 |
|
| 415 |
1.1 |
|
| 416 |
1.1 |
|
| 418 |
1.1 |
|
| 422 |
1.1 |
|
| 423 |
1.1 |
|
| 425 |
1.1 |
|
| 431 |
1.1 |
|
| 432 |
1.1 |
|
| 433 |
1.1 |
|
| 434 |
1.1 |
|
| 438 |
1.1 |
|
| 441 |
1.1 |


|
cds
1.2.0
|
Uninitialized guard. More...
#include <cds/gc/ptb/ptb.h>
Public Member Functions | |
| guard () | |
| Initialize empty guard. | |
| ~guard () | |
| Object destructor, does nothing. | |
| void | set (void *p) |
Guards pointer p . | |
| void | clear () |
| Clears the guard. | |
| template<typename T > | |
| T * | operator= (T *p) |
Guards pointer p . | |
| void | set_guard (details::guard_data *pGuard) |
| Set guard data. | |
| details::guard_data * | get_guard () |
| Get current guard data. | |
| details::guard_data * | get_guard () const |
| Get current guard data. |
Protected Attributes | |
| details::guard_data * | m_pGuard |
| Pointer to guard data. |
Friends | |
| class | ThreadGC |
Uninitialized guard.


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
This interface provides access to a local or remote Robix Nexus application.
| Method Summary | |
void |
connect()
Attempts to connect to a remote Nexus application. |
void |
connectAsync()
Begins connecting to a remote Nexus application asynchronously. |
void |
disconnect()
Disconnects from the remote Nexus application. |
int |
getAutoReconnectIntervalSec()
Returns the auto-reconnect interval, in seconds. |
int |
getAutoReconnectLimit()
Returns the auto-reconnect limit. |
Cam |
getCamByIndex(int index)
Returns the Cam at the specified index in the Cam list. |
Cam |
getCamByName(java.lang.String camName)
Returns the Cam with the specified name. |
int |
getCamCount()
Returns the number of Cam devices contained in the NexusConnection. |
int |
getCamListMod()
Returns the modification number for the NexusConnection's Cam list. |
Cam[] |
getCams()
Returns an array of all Cam s contained in the NexusConnection. |
int |
getConnectionState()
Returns the status of the connection. |
int |
getLastConnectionError()
Returns the last error encountered when trying to establish a connection. |
java.lang.String |
getName()
Returns the NexusConnection's name. |
java.lang.String |
getNexusVersion()
Returns the version of the Nexus application to which this object is connected. |
Nexway |
getNexway()
Returns the NexusConnection's parent Nexway . |
java.lang.String |
getRepLocation()
Returns the location of the NexusConnection's peer. |
java.lang.String |
getRepName()
Returns the name of the peer object (the Rep) to which this NexusConnection is connected. |
int |
getRepResponseTimeMs()
Returns the average reponse time (aka ping time) of the NexusConnection's peer. |
Usbor |
getUsborByIndex(int index)
Returns the Usbor at the specified index in the Usbor list. |
Usbor |
getUsborByName(java.lang.String usborName)
Returns the Usbor with the specified name. |
Usbor |
getUsborBySerialNum(java.lang.String serialNum)
Returns the Usbor with the specified serial number. |
int |
getUsborCount()
Returns the number of Usbor devices contained in the Nexus. |
int |
getUsborListMod()
Returns the modification number for the NexusConnection's Usbor list. |
Usbor[] |
getUsbors()
Returns an array of all Usbor s contained in the NexusConnection. |
boolean |
isAutoReconnectEnabled()
Determines if auto-reconnect is enabled. |
boolean |
isConnected()
Determines if the NexusConnection is connected to a remote Nexus application. |
boolean |
isConnecting()
Determines if the NexusConnection is in the process of connecting to a remote Nexus application. |
void |
setAutoReconnectEnabled(boolean enabled)
Sets whether or not auto-reconnect is enabled. |
void |
setAutoReconnectIntervalSec(int intervalSec)
Sets the auto-reconnect interval, in seconds. |
void |
setAutoReconnectLimit(int limit)
Sets the auto-reconnect limit. |
| Method Detail |
public Nexway getNexway()
Nexway
.
Nexway
public java.lang.String getName()
public boolean isConnected()
public boolean isConnecting()
public void connect() throws java.net.UnknownHostException, java.io.IOException, RbxUnsupportedVersionException, java.lang.InterruptedException, java.lang.IllegalStateException
java.net.UnknownHostException
- if the specified host cannot be found
java.io.IOException
- if an IO error occurs when connecting to the host
(commonly occurs when host is found but remote
Nexus application is not found)
RbxUnsupportedVersionException
- if a remote Nexus was found,
but it is incompatible
java.lang.InterruptedException
- if another thread has interrupted the
current thread. The interrupted status of the
current thread is cleared when this exception
is thrown.
java.lang.IllegalStateException
- if already connectingconnectAsync()
public void connectAsync()
isConnected()
,
isConnecting()
, getConnectionState()
, and/or
getLastConnectionError()
.If auto-reconnect settings need to be changed, they should be changed before calling this method. By default:
public void disconnect()
public int getConnectionState()
Possible return values are defined in ConnectState
.
public int getLastConnectionError()
Possible return values are defined in ConnectError
.
public boolean isAutoReconnectEnabled()
public void setAutoReconnectEnabled(boolean enabled)
Auto-reconnect must be enabled in order to use connectAsync().
If auto-reconnect is enabled, and the connection to the remote Nexus application is lost, an attempt is made to re-establish the connection. The connection will be re-tried periodically, depending on the auto-reconnect interval. The auto-reconnect limit determines how many re-tries are performed before giving up.
enabled
- true to enable auto-reconnect; false to disablepublic int getAutoReconnectIntervalSec()
public void setAutoReconnectIntervalSec(int intervalSec)
intervalSec
- the auto-reconnect interval, in seconds;
(must be a positive number)
java.lang.IllegalArgumentException
- if intervalSec
is <= 0public int getAutoReconnectLimit()
public void setAutoReconnectLimit(int limit)
limit
- the auto-reconnect limit; set to 0
for infinite
(must be non-negative)
java.lang.IllegalArgumentException
- if limit
is < 0public int getUsborCount()
public Usbor getUsborByIndex(int index)
Usbor
at the specified index in the Usbor list. Note
that an Usbor's index may change at any time due to other Usbors being
added/removed.
This method, in conjunction with getUsborListMod()
, could be
used to iterate through all existing Usbors. However, an easier approach
it to use getUsbors()
to get a list of all known Usbors.
index
- the Usbor index (zero-based)
null
if the
Usbor was not foundpublic Usbor getUsborByName(java.lang.String usborName)
Usbor
with the specified name.
usborName
- the Usbor name
null
if the
Usbor was not foundpublic Usbor getUsborBySerialNum(java.lang.String serialNum)
Usbor
with the specified serial number.
serialNum
- the serial number
null
if the
Usbor was not foundpublic Usbor[] getUsbors()
Usbor
s contained in the NexusConnection.
public int getUsborListMod()
Usbor
list.
This number is incremented every time a new Usbor is detected or an
existing Usbor is removed.This function is typically used to determine if any new Usbors have appeared or any existing Usbors have disappeared.
public int getCamCount()
public Cam getCamByIndex(int index)
Cam
at the specified index in the Cam list. Note
that an Cam's index may change at any time due to other Cams being
added/removed.
This method, in conjunction with getCamListMod()
, could be
used to iterate through all existing Cams. However, an easier approach
it to use getCams()
to get a list of all known Cams.
index
- the Cam index (zero-based)
null
if the
Cam was not foundpublic Cam getCamByName(java.lang.String camName)
Cam
with the specified name.
camName
- the Cam name
null
if the
Cam was not foundpublic Cam[] getCams()
Cam
s contained in the NexusConnection.
public int getCamListMod()
Cam
list.
This number is incremented every time a new Cam is detected or an
existing Cam is removed.This function is typically used to determine if any new Cams have appeared or any existing Cams have disappeared.
public java.lang.String getRepName()
public java.lang.String getRepLocation()
public int getRepResponseTimeMs()
public java.lang.String getNexusVersion()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Smash gear is a CCG table top game focus on the spacial movement. Players need to combine their cards into combo and resemble their warmachines, to destroy their enemies by flipping them.
Smash Gear是一款以空间移动为核心要素的CCG桌面卡牌游戏。玩家需要通过不同的卡牌组合出自己的作战机器，并通过翻转的方式将棋子在棋盘上移动，以此来攻击、消灭敌人。
You can check the rules here
.具体规则可以参见这里


Nazarro, Carlo
<EMAIL_ADDRESS>I am looking for suitable Job where I could practice my knowledge and developed my personality as a career person while utilizing my skills
Leadership Training and team Building Seminar
Computer Literacy Training
Junior Developer, Software Company (2011 - Present)
Languages: C#, JavaScript, Python, Ruby
Frameworks: .NET, Node.js, Django, Ruby on Rails
Oriented in Microsoft Office application such as:
Capable of editing picture, files and presentation using different MicrosoftWindows applications
Proficient in Visual 9.0 programming language.
Computer Format and repair
BS, Information Technology, University of the Cordilleras


You must either wait for admin approval before making further changes or you can dismiss pending changes.
*If you changed your password, the password change was applied immediately.
First Name: {{ pendingProfile?.firstName }}
Last Name: {{ pendingProfile?.lastName }}
Username: {{ pendingProfile?.username }}
Email: {{ pendingProfile?.email }}
Address: {{ pendingProfile?.address }}
City: {{ pendingProfile?.city }}
State: {{ pendingProfile?.State }}
Zip Code: {{ pendingProfile?.zipCode }}
Phone: {{ pendingProfile?.phone }}
PayPal: {{ pendingProfile?.paypal }}
Birthday: {{ pendingProfile?.birthday }}


| Coupon |
* Sponsored Results
Woburn, MA Yellow Pages
7 Winn St Woburn, MA 01801. Phone :<PHONE_NUMBER>. Product & Services: . Miscellaneous Retail Stores Pet Foods Pet Grooming & Boarding Pet Stores .
http://www.theusaexplorer.com/Massachusetts/Woburn1.html
soft air sports of oregon navy information professional 1600 ip
Pet Shops in Maynard MA | Reviews - Yellowbook
Results 1 - 20 of 846 . Find Pet Shops in Maynard, MA on Yellowbook.
http://www.yellowbook.com/yellow-pages/?what=pet+shops&where=Maynard%2C+MA
400 Elm Ave
Yukon,
OK 73099
friends of quetico foundation
Family Night Dinner Group Studies Ministries for all ages
europeans affecting natives culture wood router photo software insignia lcd 37 inch problems
900 S Littler Ave
Edmond,
OK 73034
whitney dill and west alabama
pet grooming Winchester | Find pet grooming in Winchester, MA
Results 1 - 15 of 409 . pet grooming for Winchester, MA. . Mobile Pet Grooming; Expert Pet Groomers Who Come to You. . 104 Winn St, Woburn, MA 01801 .
http://directory.nh.com/winchester+ma/pet+grooming.zq.html
general enquiry line of insolvency service the best apple loop libraries fostering connections to success
500 S Country Club Rd
pet grooming and boarding kennels Burlington | Find pet grooming ...
pet grooming and boarding kennels for Burlington, MA. Find phone . 19 Main St, Wakefield, MA 01880; View Website . 104 Winn St, Woburn, MA 01801 .
http://directory.bostonherald.com/burlington+ma/pet+grooming+and+boarding+kennels.zq.html
pet grooming Lexington | Find pet grooming in Lexington, MA
Results 1 - 15 of 434 . pet grooming for Lexington, MA. . driving directions and reviews for pet grooming in Lexington, MA. . 104 Winn St, Woburn, MA 01801 .
http://directory.nh.com/lexington+ma/pet+grooming.zq.html
world of warcraft class guide what is symbolic speach chris cagle id be lyen
Basic Listings
226 S 29th St
39 Winn St, Burlington, MA 01803 - Zillow
View 18 photos, tax records, sales history, and home values for 39 Winn St. This home is listed for sale at $220000. Why lease when you can own?  At the Woburn Animal Hospital, we are committed to bring the best of veterinary care to your pet.
http://woburn.patch.com/listings/woburn-animal-hospital-inc
the best apple loop libraries mankato state university minnesota communication disorders car seat covers padded
116 E Georgia Ave
A Pet's Choice (Daycare, Groomers & Spas) Woburn, MA
See contact info, reviews, photos and maps of A Pet's Choice in Woburn, MA. . 104 Winn St Woburn, MA 01801 . Groomers and day care. Is this your .
http://www.dogster.com/local/MA/Woburn/Pet_Daycare/A_pets_choice-6611
kwc kg 53 ahb cheesecake factory baltimore md negative affects low salinity seas
301 S 2nd St
Petsmart Pet Grooming - Woburn, MA Patch
Just inside the large automatic doors, the grooming center has a long series of windows for . Read professional news coverage for Woburn, MA, blog posts from .
http://woburn.patch.com/listings/petsmart-pet-grooming-2
mazda 626 transmission repair guide washington dc rental cars different kinds of charts
1910 S 20th St
Pet Groomers listings in Woburn,MA - Boston, MA Local Businesses
Find Pet Groomers in Woburn,MA. Get Pet Groomers phone numbers, driving directions, business addresses, maps, reviews and more. . 104 Winn St (0.4 mi.) .
http://local.thebostonchannel.com/s/MA-Woburn/Pet-Groomers
download game development software texas tech versus smu world cup 2006 projected lineups
728 W Michigan Ave
pet grooming Woburn | Find pet grooming in Woburn, MA
Results 1 - 15 of 414 . pet grooming for Woburn, MA. . maps, driving directions and reviews for pet grooming in Woburn, MA. . 104 Winn St, Woburn, MA 01801 .
http://directory.bostonherald.com/woburn+ma/pet+grooming.zq.html
roper corporation la fayette ga events maryland state fair grounds realtors office charleston wv
3340 S 16th St
A Pet's Choice - Woburn, MA Patch
A Pet's Choice is an exclusive pet grooming and pet day care service. Their experienced . 104 Winn St Woburn, MA 01801 | Get Directions ».<PHONE_NUMBER> .
http://woburn.patch.com/listings/a-pets-choice
free kneeling africian american santa graphics youths implication to drugabuse control post office drop-box kauai
828 S 9th St
Wilmington Pet Shop - Woburn, MA Patch
Pet grooming services and small pet boarding are also available. . Read professional news coverage for Woburn, MA, blog posts from community experts, and .
http://woburn.patch.com/listings/wilmington-pet-shop-0ac4afae
heavy vehicle parts inc herpes vias de transmision sat set up for 2700a
1300 S 29th St
A Pet's Choice
104 Winn St. Woburn, MA 01801<PHONE_NUMBER> . Grooming is not just to make your pet look cute but essential in keeping your pet healthy. At A Pet's Choice, .
http://www.apetschoice.com/
tikun olam action network theatre cell phone announcements mazda 626 transmission repair guide
102 E Almar Dr
Artisan Childcare Center - Care.com Woburn, MA Child Care Center
Pets. Home. Lifestyle. Military Families. My Care.com. How It Works . Pet Care Provider, Pet Sitting/Walking, Pet Day Care, Boarding/Kenneling, Pet Training, Grooming, Veterinary . Child Care Center 237 Winn St., Woburn, MA 01801 .
http://www.care.com/artisan-childcare-center-woburn-p1373-q22433281.html
nikon camera gadget bag pioneer sd-p5191-k technical specs sweet child o mine daycare
320 S 4th St
Fast Food, Delivery & Carry Out - Hanscom Air Force Base ...
Pet Care. Find a new Pet · Pet Grooming · Pet Sitting / Kennels .
http://www.militaryavenue.com/Hanscom+Air+Force+Base/387/Fast+Food,+Delivery+-+Carry+Out/154/Listing.aspx
negative affects low salinity seas gulfside manor vacation rental indian rocks double broiler oven ranges
901 W Grand Ave
Lawn Mower Sale/Repair - Soldier Systems Center Natick ...
Pet Care. Find a new Pet · Pet Grooming · Pet Sitting / Kennels .
http://www.militaryavenue.com/Soldier+Systems+Center+Natick/388/Lawn+Mower+Sale-Repair/110/Listing.aspx
washington dc rental cars roper corporation la fayette ga airlines leaving from brazil
2414 State Highway 92
Day Care in Lynnfield, MA | Lynnfield Day Care Centers
Find the best day care in Lynnfield, MA quick and easy. . A Better Companion: Doggy Daycare, Grooming, Training . Address: 237 Winn Street, Woburn, MA .
http://www.getkidsinaction.org/ma/day-care-lynnfield
124 S 6th St
Woburn, Massachusetts - Dog-Friendly Listings
A Pet's Choice Daycare, Groomers & Spas 104 Winn St Woburn, MA 01801. Groomers and day care. Extended Stay Deluxe Boston - Woburn Hotels 831 Main .
http://www.dogster.com/local/MA/Woburn
3320 S 16th St
Physicians Doctors & Surgeons - Massachusetts County Yellow Pages
6 days ago . Pet Stores Groomers & Breeders . Search the Massachusetts Physicians Doctors & Surgeons Boston . 110 Winn Street, Woburn, MA 01801 .
http://www.massachusettscountyyellowpages.com/physiciansanddoctors.htm
post office drop-box kauai youths implication to drugabuse control lydia italy celery root salad recipe
802 Frisco Ave
Spiritual - Gay Pink Pages
515 Woburn St., Tewksbury, MA 01876,<PHONE_NUMBER>,<PHONE_NUMBER>, www. salterschool.com. . 30 Winn St., Burlington, MA,<PHONE_NUMBER>, . Dog and cat grooming, diagnostic ultrasound on site, feline boarding, exotic pets welcome.
http://www.linkpink.com/mbos.s.z.html
negative affects low salinity seas page mrachek fitzgerald rose learn spanish online free easy
609 W Highway 277
Tall Tails Doggie Day Care offers daycare and overnight boarding ...
Tall Tails Doggie Daycare provides a safe and affordable alternative to leaving your dog alone while you work. We pick up dogs in Charlestown, Cambridge .
https://talltails.biz/
bios on a personnel trainer risk evaluation in supply chain management www las vegas entertainment
2828 S 9th St
Massachusetts Veterinarians
776 Main St, Great Barrington, MA 01230,<PHONE_NUMBER>. Abbott Animal . 216 Cambridge Rd, Woburn, MA 01801,<PHONE_NUMBER>. Acorn Animal . Winn Kay DVM 185 Locust St . Pet Cetera Boarding and Grooming 820 Pleasant St .
http://www.lookooh.com/V/Massachusetts/Veterinarians.html
john ragsdale cherokee county texas most white christian states youths implication to drugabuse control
202 S 6th St
Pharmacy / Drug Stores - Hanscom Air Force Base - MilitaryAvenue ...
Pet Care. Find a new Pet · Pet Grooming · Pet Sitting / Kennels .
http://www.militaryavenue.com/Hanscom+Air+Force+Base/387/Pharmacy+-+Drug+Stores/101/Listing.aspx
staying in mexico for 6 months barrett jackson classic car auctions
428 E Almar Dr
Bowling & Billiards - Hanscom Air Force Base - MilitaryAvenue.com
Pet Care. Find a new Pet · Pet Grooming · Pet Sitting / Kennels .
http://www.militaryavenue.com/Hanscom+Air+Force+Base/387/Bowling+-+Billiards/123/Listing.aspx
dynamo fab laundry detergent purchase used wood stove barrett jackson classic car auctions
Lawn Mower Sale/Repair - Hanscom Air Force Base ...
Minuteman Repair 111 Mass. Ave Arlington , MA 02474 .
http://www.militaryavenue.com/Hanscom+Air+Force+Base/387/Lawn+Mower+Sale-Repair/110/Listing.aspx
Day Care in Stoneham, MA | Stoneham Day Care Centers
Find reliable, affordable day care in Stoneham, MA. . A Better Companion: Doggy Daycare, Grooming, Training . Address: 237 Winn Street, Woburn, MA .
http://www.getkidsinaction.org/ma/day-care-stoneham
Find Pet Merchants
Melrose, MA. Website. A Fox & Hound Pet Care. 191 beal Street. Hingham, MA 02043. A Pet's Choice Grooming and Daycare. 104 Winn Street. Woburn, MA .
http://www.caninecompany.com/cfc/influencers.aspx?referralTypeId=3
* Sponsored Results
| Select from the listings below | (executive campus cherry hill nj) | |
|
www las vegas entertainment 226 S 29th St Salon 77 in North Reading, MA - Yellowpages.com |
||
|
active usaf bases in uk 1202 W Grand Ave Woburn Animal Hospital - Woburn, MA Patch |
||
|
texas tech versus smu 116 E Georgia Ave Petsmart - Woburn, MA Patch |
||
|
exotic newcastle disease virus symptoms 301 S 2nd St Dover MA Real Estate for Sale |
||
|
demolition game 2007 jelsoft enterprises ltd 1910 S 20th St Jen's K9 Concierge - Woburn, MA Patch |
||
|
jeff ambrosino and powerlifting usa 728 W Michigan Ave Spencer MA Real Estate for Sale |
||
|
kwc kg 53 ahb 3340 S 16th St Dry Cleaners/Alterations - MilitaryAvenue.com |
||
|
working ddr and czech shepherds 828 S 9th St Lunch in Burlington, MA - Burlington |
||
|
miniature french bulldogs sale 1300 S 29th St Carol's Grooming - Woburn, MA Patch |
||
|
above the line director cost 102 E Almar Dr Massachusetts - Dog-Friendly Listings |
||
|
youths implication to drugabuse control 320 S 4th St PETCO - Woburn, MA Patch |
||
|
keep internet logged on 901 W Grand Ave Burlington, MA Real Estate Market Trends - Movoto |
||
|
comfort suites montgomery ala 2414 State Highway 92 Kingston MA Commercial Property for Sale |
||
|
university of hampton football 124 S 6th St Put a Sweet Tiger in Your House - Woburn, MA Patch |
||
|
pumpkin cream cheese squares 3320 S 16th St Boston North Shore » Massachusetts - Nationwide Employment ... |
||
|
intercity 2008 phpbb group 802 Frisco Ave Northampton MA Commercial Property for Sale |
||
|
natural gas contract engineering work 609 W Highway 277 Dover MA Estate Homes for Sale |
||
|
the black white affair 2828 S 9th St Rindge New Hampshire Real Estate for Sale |
||
|
mankato state university minnesota communication disorders 202 S 6th St Pet Friendly Luxury Apartments - Dog Friendly Boston |
||
|
different kinds of charts 428 E Almar Dr Santa Paws - pet pics with Santa! | Woburn Charitable ... |
||
| Select from the listings above | (negative affects low salinity seas) | |


{% extends 'main/base.html' %} {% load static %} {% block title %}About | {{ block.super }}{% endblock %} {% block content %}
Digestive wellness
Iridology / Iris diagnosis
Herbal medicine / Supplementation
Healthy cooking / meal planning
Hydrotherapy / Detoxification
Behavioural / Cognitive Therapy
Sustainable weight management
Stop Smoking programs
Elimination diets
Massage
Nerine is a Holistic Practitioner at heart, inspired by a passion for helping people. Her journey to Complimentary Medicine started off whilst studying Homeopathy and then continued to obtain her qualifications in Education and IT (respectively) and also became a Microsoft Office Specialist. After working for a few years she continued her studies and she also obtained numerous qualifications in Iridology, Diet and applied Nutrition, substance abuse, Natural remedies including Herbs and Tissue salts , massage, detox, Hydrotherapy, NLP (Neurolinguistic programming), cognitive/ behavioral therapy.
She owns a Holistic healing Practice focusing on Lifestyle Asessment and Support, Lifestyle Coaching and Alternative Healing and is a registered Professional with the NHA and ASCHP, Trainer and Ethno-Medicine Practitioner in the field of Traditional Health Care, and as a Health Educator registered with SACE.
She also has a corporate Training background and has lectured at University level. She presents Health talks, Health and Wellness Workshops, Stop smoking programs and Training Seminars as Health Educator (Wellness Consultant , Facilitator & Coach).
Her aim is to make a positive difference in people’s lives in assisting and guiding them to achieve and maintain optimal health, naturally.


Chef's Kitchen
March 22, 2015
Based on the video, what's your take on the DBC experience? What is your impression of DBC? How do you see yourself engaging with this type of culture? Have your expectations of DBC changed? If so, how? Are you excited to participate in this kind of learning environment? Does it make you nervous?
I believe the DBC experience would inspire a proactive learning approach to programming. I hope to engage in the DBC culture through taking the “Kitchen” approach. I will see myself as a contributor to my experience and not a passive consumer. To achieve this experience, I hope to engage with the materials and work collaboratively with my Peers. There will be both beginners and advanced programmers at the inception of DBC. However, all types of Students will be in the same journey towards becoming computer engineers. Therefore, a dynamic learning environment fostering safety and support would produce viable “world class beginners.”


About Quinoa
Quinoa is an ancient grain that is organically grown in mostly in South America with high concentrations of Calcium, Phosphorus, and Iron and is replacing Wheat as the number one grain worldwide. Quinoa also has a higher Protein content than any of the other grains, as well as being Gluten-free.


Emotional intelligence is the ability to monitor your own feelings and emotions as well as reactions to these sensations and make conscious decision on how you will act towards these sensations. Your actions are now based on more self awareness, empathy, values, judgements, principles and thought.
People who demonstrate high emtional intelligence have stellar work performance, oustanding leadership especially at/in times of crisis or challenge, and the ability to create conditions for happiness.
How to develop emotional intelligence
Emotional intelligence can be developed. One way is the practice of mindful attentiveness, ie paying attention to the act of paying attention, which frees us from making judgements of where our focus should be. This creates self awareness. Another method is to visualise how our body reacts to certain emotions and events, and then re-imagine how we will act in the future to this stimuli. This practice creates the process of self-regulation when such a real scenerio happens, an important pillar of emotional intelligence.
Two Minute Meditation
Two minutes of mindfulness is an easy way to practice and be introduced to mindfulness, even though the author says that concentrating on breath and the process of breathing is the harder way, I found it easier as my mind kept wandering using the other method.


// 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. // See the License for the specific language governing permissions and // limitations under the License. // Copyright 2007 Google Inc. All Rights Reserved. /** * @fileoverview Tree-like drilldown components for HTML tables. * * This component supports expanding and collapsing groups of rows in * HTML tables. The behavior is like typical Tree widgets, but tables * need special support to enable the tree behaviors. * * Any row or rows in an HTML table can be DrilldownRows. The root * DrilldownRow nodes are always visible in the table, but the rest show * or hide as input events expand and collapse their ancestors. * * Programming them: Top-level DrilldownRows are made by decorating * a TR element. Children are made with addChild or addChildAt, and * are entered into the document by the render() method. * * A DrilldownRow can have any number of children. If it has no children * it can be loaded, not loaded, or with a load in progress. * Top-level DrilldownRows are always displayed (though setting * style.display on a containing DOM node could make one be not * visible to the user). A DrilldownRow can be expanded, or not. A * DrilldownRow displays if all of its ancestors are expanded. * * Set up event handlers and style each row for the application in an * enterDocument method. * * Children normally render into the document lazily, at the first * moment when all ancestors are expanded. * * @see ../demos/drilldownrow.html */ // TODO: Build support for dynamically loading DrilldownRows, // probably using automplete as an example to follow. // TODO: Make DrilldownRows accessible through the keyboard. // The render method is redefined in this class because when addChildAt renders // the new child it assumes that the child's DOM node will be a child // of the parent component's DOM node, but all DOM nodes of DrilldownRows // in the same tree of DrilldownRows are siblings to each other. // // Arguments (or lack of arguments) to the render methods in Component // all determine the place of the new DOM node in the DOM tree, but // the place of a new DrilldownRow in the DOM needs to be determined by // its position in the tree of DrilldownRows. goog.provide('goog.ui.DrilldownRow'); goog.require('goog.dom'); goog.require('goog.dom.classes'); goog.require('goog.events'); goog.require('goog.ui.Component'); /** * Builds a DrilldownRow component, which can overlay a tree * structure onto sections of an HTML table. * * @param {Object=} opt_properties This parameter can contain: * contents: if present, user data identifying * the information loaded into the row and its children. * loaded: initializes the isLoaded property, defaults to true. * expanded: DrilldownRow expanded or not, default is true. * html: String of HTML, relevant and required for DrilldownRows to be * added as children. Ignored when decorating an existing table row. * decorator: Function that accepts one DrilldownRow argument, and * should customize and style the row. The default is to call * goog.ui.DrilldownRow.decorator. * @constructor * @extends {goog.ui.Component} */ goog.ui.DrilldownRow = function(opt_properties) { goog.ui.Component.call(this); var properties = opt_properties || {}; // Initialize instance variables. /** * String of HTML to initialize the DOM structure for the table row. * Should have the form '
Row contents here
'. * @type {string} * @private */ this.html_ = properties.html; /** * Controls whether this component's children will show when it shows. * @type {boolean} * @private */ this.expanded_ = typeof properties.expanded != 'undefined' ? properties.expanded : true; /** * Is this component loaded? States are true, false, and null for * 'loading in progress'. For in-memory * trees of components, this is always true. * @type {boolean} * @private */ this.loaded_ = typeof properties.loaded != 'undefined' ? properties.loaded : true; /** * If this component's DOM element is created from a string of * HTML, this is the function to call when it is entered into the DOM tree. * @type {Function} args are DrilldownRow and goog.events.EventHandler * of the DrilldownRow. * @private */ this.decoratorFn_ = properties.decorator || goog.ui.DrilldownRow.decorate; /** * Is the DrilldownRow to be displayed? If it is rendered, this mirrors * the style.display of the DrilldownRow's row. * @type {boolean} * @private */ this.displayed_ = true; }; goog.inherits(goog.ui.DrilldownRow, goog.ui.Component); /** * Example object with properties of the form accepted by the class * constructor. These are educational and show the compiler that * these properties can be set so it doesn't emit warnings. */ goog.ui.DrilldownRow.sampleProperties = { 'html': '
Sample	Sample
', 'loaded': true, 'decorator': function(selfObj, handler) { // When the mouse is hovering, add CSS class goog-drilldown-hover. goog.ui.DrilldownRow.decorate(selfObj); var row = selfObj.getElement(); handler.listen(row, 'mouseover', function() { goog.dom.classes.add(row, 'goog-drilldown-hover'); }); handler.listen(row, 'mouseout', function() { goog.dom.classes.remove(row, 'goog-drilldown-hover'); }) } }; // // Implementations of Component methods. // /** * The base class method calls its superclass method and this * drilldown's 'decorator' method as defined in the constructor. */ goog.ui.DrilldownRow.prototype.enterDocument = function() { goog.ui.DrilldownRow.superClass_.enterDocument.call(this); this.decoratorFn_(this, this.getHandler()); }; /** @inheritDoc */ goog.ui.DrilldownRow.prototype.createDom = function() { this.setElementInternal(goog.ui.DrilldownRow.createRowNode_( this.html_, this.getDomHelper().getDocument())); }; /** * A top-level DrilldownRow decorates a TR element. * * @param {Element} node The element to test for decorability. * @return {boolean} true iff the node is a TR. */ goog.ui.DrilldownRow.prototype.canDecorate = function(node) { return node.tagName == 'TR'; }; /** * Child drilldowns are rendered when needed. * * @param {goog.ui.DrilldownRow} child New child to be added. * @param {number} index position to be occupied by the child. * @param {boolean=} opt_render true to force immediate rendering. */ goog.ui.DrilldownRow.prototype.addChildAt = function(child, index, opt_render) { goog.ui.DrilldownRow.superClass_.addChildAt.call(this, child, index, false); child.setDisplayable_(this.isVisible_() && this.isExpanded()); if (opt_render && !child.isInDocument()) { child.render(); } }; /** @inheritDoc */ goog.ui.DrilldownRow.prototype.removeChild = function(child) { goog.dom.removeNode(child.getElement()); goog.ui.DrilldownRow.superClass_.removeChild.call(this, child); }; /** @inheritDoc */ goog.ui.DrilldownRow.prototype.disposeInternal = function() { delete this.html_; this.children_ = null; goog.ui.DrilldownRow.superClass_.disposeInternal.call(this); }; /** * Rendering of DrilldownRow's is on need, do not call this directly * from application code. * * Rendering a DrilldownRow places it according to its position in its * tree of DrilldownRows. DrilldownRows cannot be placed any other * way so this method does not use any arguments. This does not call * the base class method and does not modify any of this * DrilldownRow's children. */ goog.ui.DrilldownRow.prototype.render = function() { if (arguments.length) { throw Error('A DrilldownRow cannot be placed under a specific parent.'); } else { var parent = this.getParent(); if (!parent.isInDocument()) { throw Error('Cannot render child of un-rendered parent'); } // The new child's TR node needs to go just after the last TR // of the part of the parent's subtree that is to the left // of this. The subtree includes the parent. var previous = parent.previousRenderedChild_(this); var row; if (previous) { row = previous.lastRenderedLeaf_().getElement(); } else { row = parent.getElement(); } row = /** @type {Element} */ (row.nextSibling); // Render the child row component into the document. if (row) { this.renderBefore(row); } else { // Render at the end of the parent of this DrilldownRow's // DOM element. var tbody = /** @type {Element} */ (parent.getElement().parentNode); goog.ui.DrilldownRow.superClass_.render.call(this, tbody); } } }; /** * Finds the numeric index of this child within its parent Component. * Throws an exception if it has no parent. * * @return {number} index of this within the children of the parent Component. */ goog.ui.DrilldownRow.prototype.findIndex = function() { var parent = this.getParent(); if (!parent) { throw Error('Component has no parent'); } for (var i = 0; i < parent.getChildCount(); i++) { if (parent.getChildAt(i) == this) { return i; } } }; // // Type-specific operations // /** * Returns the expanded state of the DrilldownRow. * * @return {boolean} true iff this is expanded. */ goog.ui.DrilldownRow.prototype.isExpanded = function() { return this.expanded_; }; /** * Sets the expanded state of this DrilldownRow: makes all children * displayable or not displayable corresponding to the expanded state. * * @param {boolean} expanded whether this should be expanded or not. */ goog.ui.DrilldownRow.prototype.setExpanded = function(expanded) { if (expanded != this.expanded_) { this.expanded_ = expanded; goog.dom.classes.toggle(this.getElement(), 'goog-drilldown-expanded'); goog.dom.classes.toggle(this.getElement(), 'goog-drilldown-collapsed'); if (this.isVisible_()) { this.forEachChild(function(child) { child.setDisplayable_(expanded); }); } } }; /** * Returns this DrilldownRow's level in the tree. Top level is 1. * * @return {number} depth of this DrilldownRow in its tree of drilldowns. */ goog.ui.DrilldownRow.prototype.getDepth = function() { for (var component = this, depth = 0; component instanceof goog.ui.DrilldownRow; component = component.getParent(), depth++) {} return depth; }; /** * This static function is a default decorator that adds HTML at the * beginning of the first cell to display indentation and an expander * image; sets up a click handler on the toggler; initializes a class * for the row: either goog-drilldown-expanded or * goog-drilldown-collapsed, depending on the initial state of the * DrilldownRow; and sets up a click event handler on the toggler * element. * * This creates a DIV with class=toggle. Your application can set up * CSS style rules something like this: * * tr.goog-drilldown-expanded .toggle { * background-image: url('minus.png'); * } * * tr.goog-drilldown-collapsed .toggle { * background-image: url('plus.png'); * } * * These background images show whether the DrilldownRow is expanded. * * @param {goog.ui.DrilldownRow} selfObj DrilldownRow to be decorated. */ goog.ui.DrilldownRow.decorate = function(selfObj) { var depth = selfObj.getDepth(); var row = selfObj.getElement(); if (!row.cells) { throw Error('No cells'); } var cell = row.cells[0]; var html = '

' + '

'; var fragment = selfObj.getDomHelper().htmlToDocumentFragment(html); cell.insertBefore(fragment, cell.firstChild); goog.dom.classes.add(row, selfObj.isExpanded() ? 'goog-drilldown-expanded' : 'goog-drilldown-collapsed'); // Default mouse event handling: var toggler = fragment.getElementsByTagName('div')[0]; var key = selfObj.getHandler().listen(toggler, 'click', function(event) { selfObj.setExpanded(!selfObj.isExpanded()); }); }; // // Private methods // /** * Turn display of a DrilldownRow on or off. If the DrilldownRow has not * yet been rendered, this renders it. This propagates the effect * of the change recursively as needed -- children displaying iff the * parent is displayed and expanded. * * @param {boolean} display state, true iff display is desired. * @private */ goog.ui.DrilldownRow.prototype.setDisplayable_ = function(display) { if (display && !this.isInDocument()) { this.render(); } if (this.displayed_ == display) { return; } this.displayed_ = display; if (this.isInDocument()) { this.getElement().style.display = display ? '' : 'none'; } var selfObj = this; this.forEachChild(function(child) { child.setDisplayable_(display && selfObj.expanded_); }); }; /** * True iff this and all its DrilldownRow parents are displayable. The * value is an approximation to actual visibility, since it does not * look at whether DOM nodes containing the top-level component have * display: none, visibility: hidden or are otherwise not displayable. * So this visibility is relative to the top-level component. * * @return {boolean} visibility of this relative to its top-level drilldown. * @private */ goog.ui.DrilldownRow.prototype.isVisible_ = function() { for (var component = this; component instanceof goog.ui.DrilldownRow; component = component.getParent()) { if (!component.displayed_) return false; } return true; }; /** * Create and return a TR element from HTML that looks like * "
 ...
". * * @param {string} html for one row. * @param {Document} doc object to hold the Element. * @return {Element} table row node created from the HTML. * @private */ goog.ui.DrilldownRow.createRowNode_ = function(html, doc) { // Note: this may be slow. var tableHtml = '
' + html + '
'; var div = doc.createElement('div'); div.innerHTML = tableHtml; return div.firstChild.rows[0]; }; /** * Get the recursively rightmost child that is in the document. * * @return {goog.ui.DrilldownRow} rightmost child currently entered in * the document, potentially this DrilldownRow. If this is in the * document, result is non-null. * @private */ goog.ui.DrilldownRow.prototype.lastRenderedLeaf_ = function() { var leaf = null; for (var node = this; node && node.isInDocument(); // Node will become undefined if parent has no children. node = node.getChildAt(node.getChildCount() - 1)) { leaf = node; } return /** @type {goog.ui.DrilldownRow} */ (leaf); }; /** * Search this node's direct children for the last one that is in the * document and is before the given child. * @param {goog.ui.DrilldownRow} child The child to stop the search at. * @return {goog.ui.Component?} The last child component before the given child * that is in the document. * @private */ goog.ui.DrilldownRow.prototype.previousRenderedChild_ = function(child) { for (var i = this.getChildCount() - 1; i >= 0; i--) { if (this.getChildAt(i) == child) { for (var j = i - 1; j >= 0; j--) { var prev = this.getChildAt(j); if (prev.isInDocument()) { return prev; } } } } return null; };


3D Modeling with
ThreeJS and AngularJS
Ben Preece
<EMAIL_ADDRESS>AngularMN Meetup
12 July 2017
Virtuwell, St. Paul, MN


Prints Java thread stack traces for a Java process, core file, or remote debug server. This command is experimental and unsupported.
jstack [ options ] pid
jstack [ options ] executable core
jstack [ options ] [ server-id@ ] remote-hostname-or-IP
The command-line options. See Options.
The process ID for which the stack trace is printed. The process must be a Java process. To get a list of Java processes running on a machine, use the jps
(1) command.
The Java executable from which the core dump was produced.
The core file for which the stack trace is to be printed.
The remote debug server hostname
or IP
address. See jsadebugd
(1).
An optional unique ID to use when multiple debug servers are running on the same remote host.
The jstack
command prints Java stack traces of Java threads for a specified Java process, core file, or remote debug server. For each Java frame, the full class name, method name, byte code index (BCI), and line number, when available, are printed. With the -m
option, the jstack
command prints both Java and native frames of all threads with the program counter (PC). For each native frame, the closest native symbol to PC, when available, is printed. C++ mangled names are not demangled. To demangle C++ names, the output of this command can be piped to c++filt
. When the specified process is running on a 64-bit Java Virtual Machine, you might need to specify the -J-d64
option, for example: jstack -J-d64 -m pid
.
Note: This utility is unsupported and might not be available in future release of the JDK. In Windows Systems where the dbgeng.dll file is not present, Debugging Tools For Windows must be installed so these tools work. The PATH
environment variable needs to contain the location of the jvm.dll that is used by the target process, or the location from which the crash dump file was produced. For example:
set PATH=<jdk>\jre\bin\client;%PATH%
Force a stack dump when jstack
[-l
] pid
does not respond.
Long listing. Prints additional information about locks such as a list of owned java.util.concurrent
ownable synchronizers. See the AbstractOwnableSynchronizer
class description at
http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/AbstractOwnableSynchronizer.html
Prints a mixed mode stack trace that has both Java and native C/C++ frames.
Prints a help message.
Prints a help message.


Mutebi Pavel are my names.
Welcome to my first webpage!
These are some of the projects have done sofar:-
ABOUT ME
I had my primary from Kitante Primary school which is a goverment school but one of the best primary schools in uganda, and then my secondry in Seroma Christian High School which is a private school but with a lit standard
Have worked with two companies in my vacation;
I choose to join this pragraming class to acquire the best programming skills, in order to be able to solve all people's problems that can be solved using I.T in this world!
My Hobbies include;
My Intrests include;
My personal skills are;


Values
Chart value
Transform Series
Queries
Delete

Mode
Value Field
This field must contain a numeric value
Scale
Seconds
Normalize intervals to per-second
Derivative
Plot the change per interval in the series
Zero fill
Fills zeros in gaps.
Yaxis Position
default 'left'
Selected Queries
{{querySrv.list()[id].alias || querySrv.list()[id].query}}

Add value
Time Options
Time Field
Time correction
Auto-interval
Resolution
Shoot for this many data points, rounding to sane intervals
Interval
Use Elasticsearch date math format (eg 1m, 5m, 1d, 2w, 1y)


Week 11: Investment Calculator
JJ Jones
Investment Calculator
Amount invested (principal)
Annual rate (example: .08)
Number of years
Periods per year
Compute future value


--- date: 2010-08-22T00:00:00Z published: true title: Terry Glavin - A Warning To The War-Weary World - Just Watch What Your 'Peace' Will Bring You. url: /2010/08/22/terry-glavin-a-warning-to-the-war-weary-world-just-watch-what-your-peace-will-bring-you-/ ---
Killing aid workers is what the Taliban does. It is what the Taliban wants to do.  It is precisely because these are the principles that govern a humanitarian aid worker's service that the Taliban targets them and kills them. It is precisely because the delivery of humanitarian aid in a place like Afghanistan cannot be "autonomous from the political, economic, military or other objectives that any actor may hold" that it is delusional to carry on in this way.


The messages screen shows all the messages that appear on the status line so that the user can review them.
It can be viewed by the 'View | Messages' menu option or by clicking on the message area of the status bar.


public
, protected
, and
private
transient
and volatile
static
final
The method
Field.getModifiers()
can be used to return the integer representing the set of declared modifiers
for the field. The bits representing the modifiers in this integer are defined
in
java.lang.reflect.Modifier
.
The
example illustrates how to search for fields with a given modifier. It also
determines whether the located field is synthetic (compiler-generated) or is an
enum constant by invoking
FieldModifierSpy
Field.isSynthetic()
and
Field.isEnumCostant()
respectively.
import java.lang.reflect.Field; import java.lang.reflect.Modifier; import static java.lang.System.out; enum Spy { BLACK , WHITE } public class FieldModifierSpy { volatile int share; int instance; class Inner {} public static void main(String... args) { try { Class<?> c = Class.forName(args[0]); int searchMods = 0x0; for (int i = 1; i < args.length; i++) { searchMods |= modifierFromString(args[i]); } Field[] flds = c.getDeclaredFields(); out.format("Fields in Class '%s' containing modifiers: %s%n", c.getName(), Modifier.toString(searchMods)); boolean found = false; for (Field f : flds) { int foundMods = f.getModifiers(); // Require all of the requested modifiers to be present if ((foundMods & searchMods) == searchMods) { out.format("%-8s [ synthetic=%-5b enum_constant=%-5b ]%n", f.getName(), f.isSynthetic(), f.isEnumConstant()); found = true; } } if (!found) { out.format("No matching fields%n"); } // production code should handle this exception more gracefully } catch (ClassNotFoundException x) { x.printStackTrace(); } } private static int modifierFromString(String s) { int m = 0x0; if ("public".equals(s)) m |= Modifier.PUBLIC; else if ("protected".equals(s)) m |= Modifier.PROTECTED; else if ("private".equals(s)) m |= Modifier.PRIVATE; else if ("static".equals(s)) m |= Modifier.STATIC; else if ("final".equals(s)) m |= Modifier.FINAL; else if ("transient".equals(s)) m |= Modifier.TRANSIENT; else if ("volatile".equals(s)) m |= Modifier.VOLATILE; return m; } }
Sample output follows:
$ java FieldModifierSpy FieldModifierSpy volatile Fields in Class 'FieldModifierSpy' containing modifiers: volatile share [ synthetic=false enum_constant=false ] $ java FieldModifierSpy Spy public Fields in Class 'Spy' containing modifiers: public BLACK [ synthetic=false enum_constant=true ] WHITE [ synthetic=false enum_constant=true ] $ java FieldModifierSpy FieldModifierSpy\$Inner final Fields in Class 'FieldModifierSpy$Inner' containing modifiers: final this$0 [ synthetic=true enum_constant=false ] $ java FieldModifierSpy Spy private static final Fields in Class 'Spy' containing modifiers: private static final $VALUES [ synthetic=true enum_constant=false ]
Notice that some fields are reported even though they are not declared in
the original code. This is because the compiler will generate some
synthetic fields which are needed during runtime. To test whether a
field is synthetic, the example invokes
Field.isSynthetic()
. The set of synthetic fields is compiler-dependent; however commonly used
fields include this$0
for inner classes (i.e. nested classes
that are not static member classes) to reference the outermost enclosing class
and $VALUES
used by enums to implement the implicitly defined
static method values()
. The names of synthetic class members are
not specified and may not be the same in all compiler implementations or
releases. These and other synthetic fields will be included in the array
returned by
Class.getDeclaredFields()
but not identified by
Class.getField()
since synthetic members are not typically public
.
Because
Field
implements the interface
java.lang.reflect.AnnotatedElement
, it is possible to retrieve any runtime annotation with
java.lang.annotation.RetentionPolicy.RUNTIME
. For an example of obtaining annotations see the section Examining Class Modifiers and
Types.


This book does not exist. This probably means that the book has been removed from the site. If you would like to search for a similar book, please visit the home page.


Wahlque
Home
Blog
Wiki
Playground
Code
en-us
zh-cn
zh-hk
zh-sg
zh-tw
Day and night on Wahlque.
Generated terra on Wahlque
A tree generated by L-system
Proof of concept
The orbits of the three star system
A tree
The weather on the planet
(warning: it need one minute to intialize and one minute per step for calculating)
CoffeeScript tutorial
Hello World
Using modules
Qwery, Bonzo, Bean
WebWorkers
Mechanics tutorial
Binary stars
Planet in a binary star system
Twilight zone on the planet
Computational graphics tutorial
Terrain generation
Rotated Wahlque
Colorful Wahlque
Atmospheric science tutorial
Temperature on the planet
Notice


Mission Statement
Hosts Packages
DualServer Blacklists & Extras
Additional Blacklist Support
Mac Address Goodies
Geo Tor Table
Tiny Operating Systems
More from ScriptTiger
GitHub Projects
Twitter Feed
Contact ScriptTiger


About Me
Hello and welcome to my portfolio page. My name is John Bell and I currently reside in Columbus, Georgia. I am originally from England and have lived in the United States of America since December 2007. I have worked in the IT industry now for over 23 years and have held various roles in that time. I started off as junior programmer working for Equifax in Bradford, England. My current role is a Software Engineer Consultant at Global Payments Inc. The current role I serve in at the moment is in the modernization team. The company is looking at moving to a more cloud based system. I am doing this bootcamp to better understand and learn more on the full stack role and hope to be able to use the new skills in enabling me to work on this kind of work at Global Payments.
Outside of work I like spending time with family and friends and playing sports. I am a passionate Sheffield Wednesday fan and have supported them my whole life. I also like to hike, play tennis, play football (soccer) and swim. Other hobbies/past times include reading and doing handyman type things around the house.


|
Groovy 2.1.7 | |||||||
| FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object junit.framework.TestSuite groovy.util.AllTestSuite
public class AllTestSuite extends TestSuite
AllTestSuite can be used in extension of GroovyTestSuite to execute TestCases written in Groovy from inside a Java IDE. AllTestSuite collects all files below a given directory that comply to a given pattern. From these files, a TestSuite is constructed that can be run via an IDE graphical Test runner. The files are assumed to be Groovy source files and be either a TestCase or a Script that can be wrapped transparently into a TestCase. The directory and the pattern can be set via System properties (see this classes' constants for details.)
When setting the loglevel of this class to FINEST, all file loading will be logged.
See also groovy.util.AllTestSuiteTest.groovy
| Field Summary | |
|---|---|
static String |
SYSPROP_TEST_DIR
The System Property to set as base directory for collection of Test Cases. |
static String |
SYSPROP_TEST_EXCLUDES_PATTERN
The System Property to set as a filename excludes pattern for collection of Test Cases. |
static String |
SYSPROP_TEST_PATTERN
The System Property to set as the filename pattern for collection of Test Cases. |
| Method Summary | |
|---|---|
protected Class
|
compile(String filename)
|
protected void
|
loadTest(String filename)
|
static Test
|
suite()
|
static Test
|
suite(String basedir, String pattern)
|
static Test
|
suite(String basedir, String pattern, String excludesPattern)
|
| Field Detail |
|---|
public static final String SYSPROP_TEST_DIR
public static final String SYSPROP_TEST_EXCLUDES_PATTERN
public static final String SYSPROP_TEST_PATTERN
| Method Detail |
|---|
protected Class compile(String filename)
@SuppressWarningsClass type = compile(filename); protected void loadTest(String filename)
public static Test suite()
public static Test suite(String basedir, String pattern)
public static Test suite(String basedir, String pattern, String excludesPattern)
Copyright © 2003-2013 The Codehaus. All rights reserved.