Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2010 JBoss Inc
   *
   * 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.
  */
 package org.guvnor.inbox.backend.server;
 
 import java.util.List;
 import java.util.Set;
 
 
 
 
 import static org.kie.commons.io.FileSystemType.Bootstrap.BOOTSTRAP_INSTANCE;

This service the "delivery" of messages to users inboxes for events. Ideally only one instance of this running at a time (at least on a node) to avoid doubling up.
 
 public class MailboxService {
 
     private static final Logger log = LoggerFactory.getLoggerMailboxService.class );
 
     private ExecutorService executor = null;
     public static final String MAIL_MAN = "mailman";
 
     @Inject
     private InboxService inboxService;
 
     @Inject
     @Named("ioStrategy")
     private IOService ioService;
 
     private org.kie.commons.java.nio.file.Path bootstrapRoot = null;
 
     @PostConstruct
     public void setup() {
         final Iterator<FileSystemfsIterator = .getFileSystems ).iterator();
         if ( fsIterator.hasNext() ) {
             final FileSystem bootstrap = fsIterator.next();
             final Iterator<org.kie.commons.java.nio.file.PathrootIterator = bootstrap.getRootDirectories().iterator();
             if ( rootIterator.hasNext() ) {
                 this. = rootIterator.next();
             }
         }
 
          = Executors.newSingleThreadExecutor();
         .info"mailbox service is up" );
         wakeUp();
     }
 
     @PreDestroy
     public void destroy() {
         stopExecutor();
     }
 
     public void stopExecutor() {
         .info"Shutting down mailbox service" );
         .shutdown();
 
         try {
             if ( !.awaitTermination( 10, . ) ) {
                 .shutdownNow();
                 if ( !.awaitTermination( 10, . ) ) {
                     ..println"executor did not terminate" );
                 }
             }
         } catch ( InterruptedException e ) {
             .shutdownNow();
             Thread.currentThread().interrupt();
        }
        .info"Mailbox service is shutdown." );
    }
    public void wakeUp() {
        .debug"Waking up" );
        .executenew Runnable() {
            public void run() {
                processOutgoing();
            }
        } );
    }

    
Call this to note that there has been a change - will then publish to any interested parties.

Parameters:
item

    
Process any waiting messages
    void processOutgoing() {
        .executenew Runnable() {
            public void run() {
                final List<InboxEntryes = ( (InboxServiceImpl ).loadIncoming );
                .debug"Outgoing messages size " + es.size() );
                //wipe out inbox for mailman here...
                String[] userList = listUsers();
                ..println"userServices:" + userList.length );
                for ( String toUser : userList ) {
                    ..println"userServices:" + toUser );
                    .debug"Processing any inbound messages for " + toUser );
                    if ( toUser.equals ) ) {
                        return;
                    }
                    Set<StringrecentEdited = makeSetOf( ( (InboxServiceImpl ).loadRecentEditedtoUser ) );
                    for ( InboxEntry e : es ) {
                        //the user who edited the item wont receive a message in inbox.
                        if ( !e.from.equalstoUser ) && recentEdited.containse.itemPath ) ) {
                            ( (InboxServiceImpl ).addToIncominge.itemPathe.notee.fromtoUser );
                        }
                    }
                }
            }
        } );
    }
    private Set<StringmakeSetOfList<InboxEntryinboxEntries ) {
        Set<Stringentries = new HashSet<String>();
        for ( InboxEntry e : inboxEntries ) {
            entries.adde.itemPath );
        }
        return entries;
    }
    public String[] listUsers() {
        //TODO: a temporary hack to retrieve user list. Please refactor later.
        List<StringuserList = new ArrayList<String>();
        org.kie.commons.java.nio.file.Path userRoot = .resolve"/.metadata/.users/" );
        final Iterator<org.kie.commons.java.nio.file.PathuserIterator = userRoot.iterator();
        if ( userIterator.hasNext() ) {
            org.kie.commons.java.nio.file.Path userDir = userIterator.next();
            userList.adduserDir.getFileName().toString() );
        }
        String[] result = new StringuserList.size() ];
        return userList.toArrayresult );
    }
New to GrepCode? Check out our FAQ X