You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 32 Next »

This web page is under construction.

Authentication
Find out how many teams I am part of
Get team project list
Get project details
Get project topology
Get project disciplines
Upload project thumbnail
Create an issue in the project
Get the issue list from the project
Delete all the issues from the project
Create a new pin for the issue
Get all the pins of the issue
Create/Upload a new attachment for the issue
Get the attachment list from the issue

Authentication

    JSON
    CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
    
        // building the json object
        if (([emailString length] != 0) && ([passwordString length] != 0))
        {
    
            NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
            NSString *requestURLString = [NSString stringWithFormat:@"%@authorize",[CSS getDefaultAPIURL]];
            [request setURL:[NSURL URLWithString:requestURLString]];
            [request setHTTPMethod:@"POST"];
            [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    
            NSString *requestBodyString = [NSString stringWithFormat:@"{\"user_id\": \"%@\", \"password\": \"%@\", \"client_id\": \"%@\"}",emailString,passwordString,[[NSUserDefaults standardUserDefaults] objectForKey:@"ClientIdentificationForAuthorizationPurposes"]];
            [request setHTTPBody:[requestBodyString dataUsingEncoding:NSUTF8StringEncoding]];
            [request setTimeoutInterval:60];
    
            __block BOOL loginFailed = NO;
    
            __block BOOL invalidUser = NO;
    
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(void){
    
                //build an info object and convert to json
                NSError *requestError;
                NSHTTPURLResponse *responseHTTP;
    
                NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseHTTP error:&requestError];
    
                if ([responseHTTP statusCode] == 200)
                {
                    NSDictionary *tempdict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:&requestError];
                    [CSS setUpAuthenticationForType:[tempdict valueForKey:@"token_type"] withID:[tempdict valueForKey:@"access_token"]];
    
                    // authorization was successfull
    
                } else {
    
                    loginFailed = YES;
    
                    if (requestError.code == -1012) {
    
                        // Failed because it's an invalid user
    
                        invalidUser = YES;
    
                    } else {
    
                        // check if project list stored on device.
                        // if yes, start offline mode
                    }
                }
            });
    
        }
    
    

    Error rendering macro 'deck'

    java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


    Find out how many teams I am part of

      JSON
      CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
      
          //build an info object and convert to json
          NSError *requestError;
          NSHTTPURLResponse *responseHTTP;
      
          NSMutableURLRequest *requestForSlug = [[NSMutableURLRequest alloc] init];
      
          NSString *teamRequestString = [NSString stringWithFormat:@"%@teams",[CSS getDefaultAPIURL]];
          [requestForSlug setURL:[NSURL URLWithString:teamRequestString]];
          [requestForSlug setHTTPMethod:@"GET"];
          [requestForSlug setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
          [requestForSlug setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
      
          NSData *responseForSlug = [NSURLConnection sendSynchronousRequest:requestForSlug returningResponse:&responseHTTP error:&requestError];
          [requestForSlug release];
      
          if ([responseHTTP statusCode] == 200) {
              // Success. Team names array.
              NSArray *tempdictForSlug = [NSJSONSerialization JSONObjectWithData:responseForSlug options:NSJSONReadingMutableContainers error:&requestError];
              NSLog(@"How many teams I am part of: %d", [tempdictForSlug count]);
          }else{
              // Login Failed.
          }
      

      Error rendering macro 'deck'

      java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


      Get team project list

        JSON
        CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
        
            //build an info object and convert to json
            NSError *requestError;
            NSHTTPURLResponse *responseHTTP;
        
            //get projectList
            NSMutableURLRequest *requestForProjectList = [[NSMutableURLRequest alloc] init];
        
            NSString *projectListRequestString = [NSString stringWithFormat:@"%@%@/projects",[CSS getDefaultAPIURL],[CSS getSlug]];
            [requestForProjectList setURL:[NSURL URLWithString:projectListRequestString]];
            [requestForProjectList setHTTPMethod:@"GET"];
            [requestForProjectList setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
            [requestForProjectList setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
        
            NSData *responseForProjectList = [NSURLConnection sendSynchronousRequest:requestForProjectList returningResponse:&responseHTTP error:&requestError];
        
            [requestForProjectList release];
        
            if (responseForProjectList == NULL) {
        
                    // Login Failed
            }
            else {
        
                NSError *error;
                NSArray *projectList = [NSJSONSerialization JSONObjectWithData:responseForProjectList options:NSJSONReadingMutableContainers error:&error];
        
                BOOL success = [[ProjectManager sharedProjectManager] loadProjectsFromData:projectList];
        
                if (!success){
        
                    // Failed to Load Projects List
        
                }
            }
        

        Error rendering macro 'deck'

        java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


        Get project details

          JSON
          //build an info object and convert to json
                  NSError *requestError;
                  NSHTTPURLResponse *responseHTTP;
                  NSError *dictError;
          
                  //Get project details
          
                  NSMutableURLRequest *requestForProjectDetails;
                  requestForProjectDetails = [[NSMutableURLRequest alloc] init];
          
                  [requestForProjectDetails setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@/projects/%@",[CSS getDefaultAPIURL],[CSS getSlug],proj.mID]]];
                  [requestForProjectDetails setHTTPMethod:@"GET"];
                  [requestForProjectDetails setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                  [requestForProjectDetails setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
          
                  NSData *responseForProjectDetails = [NSURLConnection sendSynchronousRequest:requestForProjectDetails returningResponse:&responseHTTP error:&requestError];
                  [requestForProjectDetails release];
          
                  if (responseHTTP.statusCode == 200) {
          
                      // Success, we have a project detail dictionary
                      NSDictionary *projectDetails = [NSJSONSerialization JSONObjectWithData:responseForProjectDetails options:NULL error:&dictError];
          
                      // Time to process this project details as you want/need
                      [proj processProjectDetails:projectDetails];
          
                  }else{
                      // Download Failed
                      return;
                  }
          

          Error rendering macro 'deck'

          java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


          Get project topology

            JSON
            //build an info object and convert to json
                    NSError *requestError;
                    NSHTTPURLResponse *responseHTTP;
            
                    NSString* requestString = [[NSString alloc] initWithFormat:@"%@%@/projects/%@/topology",[CSS getDefaultAPIURL],[CSS getSlug], mProjectID];
            
                    NSMutableURLRequest *requestForProjectsTree = [[NSMutableURLRequest alloc] init];
                    [requestForProjectsTree setURL:[NSURL URLWithString:requestString]];
                    [requestString release];
            
                    [requestForProjectsTree setHTTPMethod:@"GET"];
                    [requestForProjectsTree setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                    [requestForProjectsTree setValue:[[CommunicationSingleton sharedSingleton] getAuthorization] forHTTPHeaderField:@"Authorization"];
            
                    NSData *response = [NSURLConnection sendSynchronousRequest:requestForProjectsTree returningResponse:&responseHTTP error:&requestError];
                    [requestForProjectsTree release];
            
                    NSString *path = [[proj getProjectFolderPath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.topology", mProjectID]];
            
                    if ([responseHTTP statusCode] == 200)
                    {
                        // Save project topology locally.
                        [response writeToFile:path atomically:NO];
            
                        // Load project topology to memory.
                        [proj loadTopologyFromData:response];
            
                    } else {
            
                        // If Failed
            
                        // Check if we have the last used topology for this project is available offline (rembember that this is could not be the last version)
                        if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
                            // Loading project topology offline
            
                            NSData* data = [NSData dataWithContentsOfFile:path];
                            [proj loadTopologyFromData:data];
            
                        } else {
                            // Download Failed + Local Storage not available
                        }
            
                    }
            

            Error rendering macro 'deck'

            java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


            Get project disciplines

              JSON
                  Project* proj = [[ProjectManager sharedProjectManager] getProjectbyID:mProjectID];
              
                  maxNodes = [[proj getAllNodesWithoutParents] count];
              
                  // Don't download nodes data if we want to download them dynamically
                  // we are still going to need the parents
                  if ( ![[[NSUserDefaults standardUserDefaults] valueForKey:kDownloadNodesDynamically] boolValue] ) {
              
                      dispatch_async(dispatch_get_main_queue(), ^(void){
              
                          mDownloadManager = [[DownloadManager alloc] init];
                          mDownloadManager.delegate = self;
              
                          //get disciplines
                          NSArray *disciplineIds = proj.projectsDisciplineIDs;
                          for (int i = 0; i < [disciplineIds count]; i++) {
                              [mDownloadManager downloadFiles:[proj getAllNodesWithoutParents] forProject:mProjectID forDiscipline:[disciplineIds objectAtIndex:i]];
                          }
              
                          if ([disciplineIds count] < 1) {
                              [mDownloadManager downloadFiles:[proj getAllNodesWithoutParents] forProject:mProjectID forDiscipline:NULL];
                          }
              
                      });
                  }
              
              In "downloadFiles" method there are some logic and data storage operations and for each of the discipline you can call this snippet:
              
              
              	NodeHeaderDatas *nodeDatas = [mFilesToProcess objectAtIndex:0];
              	NSString *nodeidForAPICall = nodeDatas.nodeID;
              
              	CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
              	NSMutableURLRequest *requestForNodeData = [[NSMutableURLRequest alloc] init];
              	NSString *nodesURL;
                      if (nodeDatas.disciplineForDownloading != NULL) {
                          nodesURL = [NSString stringWithFormat:
                                      @"%@%@/objects/%@/disciplines/%@/geometries/threejs",
                                      [CSS getDefaultAPIURL],
                                      [CSS getSlug],
                                      nodeidForAPICall,
                                      nodeDatas.disciplineForDownloading];
                      }else{
                          nodesURL = [NSString stringWithFormat:
                                      @"%@%@/objects/%@/geometries/threejs",
                                      [CSS getDefaultAPIURL],
                                      [CSS getSlug],
                                      nodeidForAPICall];
              
                      }
                      [requestForNodeData setURL:[NSURL URLWithString:nodesURL]];
                      [requestForNodeData setHTTPMethod:@"GET"];
                      [requestForNodeData setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                      [requestForNodeData setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
              
                      if(requestForNodeData){
                          mConnection = [[NSURLConnection alloc] initWithRequest:requestForNodeData delegate:self startImmediately:YES];
                      }
              if (!mConnection)
                      {
                          // Connection Failed
                      }
                      else
                      {
                          [mConnection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
                          [mConnection start];
                      }
                      [requestForNodeData release];
              
              

              Error rendering macro 'deck'

              java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


              Upload project thumbnail

                JSON
                CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                NSString *urlString = [[CSS getDefaultAPIURL] stringByAppendingFormat:@"%@/projects/%@/thumbnail",[CSS getSlug],currentProject.mID];
                MultIPartFormCommunication *MPC = [MultIPartFormCommunication sharedSingleton];
                if (![MPC uploadImage:imagePlaceholder.image withExtension:@"jpeg" withFileName:@"thumbnail" ToURLString:urlString]){
                [[ProjectManager sharedProjectManager] addUnUploadedThumbnailsProjectIdToList:currentProject.mID];
                }
                

                See the bottom of the page to see the uploadImage method

                Error rendering macro 'deck'

                java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                Create an issue in the project

                  JSON
                  CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                  //get its dictionary:
                      NSMutableDictionary *currentIssueData = [self getIssueInformationForIssueId:ISSUE_ID];
                  
                      //create nsdata for uploading:
                      NSError *error;
                      NSData *dataForCurrentIssue = [NSJSONSerialization dataWithJSONObject:currentIssueData options:NSJSONWritingPrettyPrinted error:&error];
                  
                      //create issue request:
                      NSMutableURLRequest *uploadRequestForCurrentIssue;
                      uploadRequestForCurrentIssue = [[NSMutableURLRequest alloc] init];
                  
                      NSString *urlStringForIssue = [NSString stringWithFormat:@"%@%@/projects/%@/issues",
                                                     [CSS getDefaultAPIURL],
                                                     [CSS getSlug],
                                                     self.mID];
                  
                      [uploadRequestForCurrentIssue setURL:[NSURL URLWithString:urlStringForIssue]];
                      [uploadRequestForCurrentIssue setHTTPMethod:@"POST"];
                      [uploadRequestForCurrentIssue setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                      [uploadRequestForCurrentIssue setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
                      [uploadRequestForCurrentIssue setHTTPBody:dataForCurrentIssue];
                  
                      NSHTTPURLResponse *responseHTTPForCurrentIssue;
                  
                      NSData *responseForCurrentIssue = [NSURLConnection sendSynchronousRequest:uploadRequestForCurrentIssue returningResponse:&responseHTTPForCurrentIssue error:&error];
                      [uploadRequestForCurrentIssue release];
                  
                      if ([responseHTTPForCurrentIssue statusCode] == 201) {
                          // Success, issue uploaded
                      }else{
                          // Error, upload failed
                      }
                  

                  Error rendering macro 'deck'

                  java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                  Get the issue list from the project

                    JSON
                    CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                        //create issue request:
                        NSMutableURLRequest *issueListRequest;
                        issueListRequest = [[NSMutableURLRequest alloc] init];
                    
                        NSString *urlStringForIssue = [NSString stringWithFormat:@"%@%@/projects/%@/issues",
                                                       [CSS getDefaultAPIURL],
                                                       [CSS getSlug],
                                                       self.mID];
                        DLog(@"%@",urlStringForIssue);
                        [issueListRequest setURL:[NSURL URLWithString:urlStringForIssue]];
                        [issueListRequest setHTTPMethod:@"GET"];
                        [issueListRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                        [issueListRequest setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
                    
                        NSHTTPURLResponse *responseHTTPForIssueList;
                        NSError *error;
                    
                        NSData *rawIssueList = [NSURLConnection sendSynchronousRequest:issueListRequest returningResponse:&responseHTTPForIssueList error:&error];
                        [issueListRequest release];
                    
                        if ([responseHTTPForIssueList statusCode] == 200) {
                            NSMutableArray *issueList = [NSJSONSerialization JSONObjectWithData:rawIssueList options:NSJSONReadingMutableContainers error:&error];
                            return  issueList;
                        }else{
                            return NULL;
                        }
                    

                    Error rendering macro 'deck'

                    java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                    Delete all the issues from the project

                      JSON
                      //delete it form the server
                      	CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                      	//create issue request:
                      	NSMutableURLRequest *deleteRequest = [[NSMutableURLRequest alloc] init];
                      
                      	NSString *urlStringForIssue = [NSString stringWithFormat:@"%@%@/issues/%@",
                                                                 [CSS getDefaultAPIURL],
                                                                 [CSS getSlug],
                                                                 issueid];
                      
                      	[deleteRequest setURL:[NSURL URLWithString:urlStringForIssue]];
                      	[deleteRequest setHTTPMethod:@"DELETE"];
                      	[deleteRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                      	[deleteRequest setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
                      
                      	NSHTTPURLResponse *responseHTTPForDeletion;
                      	[NSURLConnection sendSynchronousRequest:deleteRequest returningResponse:&responseHTTPForDeletion error:&error];
                      	[deleteRequest release];
                      
                      	if ([responseHTTPForDeletion statusCode] == 200) {
                      
                      		//successful deletion
                      		return 0;
                      
                      	} else {
                      
                      	//add it to a deletion list
                      	[self addIssueToUnDeletedIssueList:issueid];
                      
                      	return 1;
                      
                      	}
                      

                      Error rendering macro 'deck'

                      java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                      Create a new pin for the issue

                        JSON
                        CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                        
                        	NSMutableDictionary *pinData = [self getPinDataForPinId:PIN_ID inIssue:ISSUE_ID];
                        
                        	//remove the id and the objectsparent id since they are unrequired data for the server:
                        	NSString *oldObjectsParentID = [pinData objectForKey:@"objectsParentId"];
                        	[pinData removeObjectForKey:@"objectsParentId"];
                        	NSString *oldPinId = [pinData objectForKey:@"id"];
                        	[pinData removeObjectForKey:@"id"];
                        
                        	//set the new issue id:
                        	[pinData setObject:newCurrentIssueId forKey:@"issueId"];
                        
                        	//create nsdata for uploading:
                        	NSData *dataForCurrentPin = [NSJSONSerialization dataWithJSONObject:pinData options:NSJSONWritingPrettyPrinted error:&error];
                        
                        	//create pin request:
                        	NSMutableURLRequest *uploadRequestForCurrentPin;
                        	uploadRequestForCurrentPin = [[NSMutableURLRequest alloc] init];
                        
                        	NSString *urlStringForPin = [NSString stringWithFormat:@"%@%@/issues/%@/pins",
                                                           [CSS getDefaultAPIURL],
                                                           [CSS getSlug],
                                                           self.newCurrentIssueID];
                        
                        	[uploadRequestForCurrentPin setURL:[NSURL URLWithString:urlStringForPin]];
                        	[uploadRequestForCurrentPin setHTTPMethod:@"POST"];
                        	[uploadRequestForCurrentPin setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                        	[uploadRequestForCurrentPin setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
                        	[uploadRequestForCurrentPin setHTTPBody:dataForCurrentPin];
                        NSHTTPURLResponse *responseHTTPForCurrentPin;
                        
                        	NSData *responseForCurrentPin = [NSURLConnection sendSynchronousRequest:uploadRequestForCurrentPin returningResponse:&responseHTTPForCurrentPin error:&error];
                        	[uploadRequestForCurrentPin release];
                        
                        	if ([responseHTTPForCurrentPin statusCode] == 201) {
                        		// success
                        	} else {
                        		// Upload Failed
                        	}
                        
                        

                        Error rendering macro 'deck'

                        java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                        Get all the pins of the issue

                          JSON
                          CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                              //create issue request:
                              NSMutableURLRequest *pinListRequest;
                              pinListRequest = [[NSMutableURLRequest alloc] init];
                          
                              NSString *urlStringForIssue = [NSString stringWithFormat:@"%@%@/issues/%@/pins",
                                                             [CSS getDefaultAPIURL],
                                                             [CSS getSlug],
                                                             issueid];
                              DLog(@"%@",urlStringForIssue);
                              [pinListRequest setURL:[NSURL URLWithString:urlStringForIssue]];
                              [pinListRequest setHTTPMethod:@"GET"];
                              [pinListRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                              [pinListRequest setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
                          
                              NSHTTPURLResponse *responseHTTPForPinList;
                              NSError *error;
                          
                              NSData *rawPinList = [NSURLConnection sendSynchronousRequest:pinListRequest returningResponse:&responseHTTPForPinList error:&error];
                              [pinListRequest release];
                          
                              if ([responseHTTPForPinList statusCode] == 200) {
                                  NSMutableArray *pinList = [NSJSONSerialization JSONObjectWithData:rawPinList options:NSJSONReadingMutableContainers error:&error];
                                  return  pinList;
                              }else{
                                  return NULL;
                              }
                          

                          Error rendering macro 'deck'

                          java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                          Create/Upload a new attachment for the issue

                            JSON
                            NSString *attachmentURL = [[CSS getDefaultAPIURL] stringByAppendingFormat:@"%@/issues/%@/attachments", [CSS getSlug],currentIssueId];
                            	MultIPartFormCommunication *MPC = [MultIPartFormCommunication sharedSingleton];
                            	NSString *imageName = [NSString stringWithFormat:@"issueImage%f",[[NSDate date] timeIntervalSince1970]];
                            	if ([MPC uploadImage:issueImage withExtension:@"jpeg" withFileName:imageName ToURLString:attachmentURL]){
                                            //succesful uploading
                                        }else{
                                            //unsuccesful uploading store the issue image in a list:
                                        }
                            
                            

                            See the bottom of the page to see the uploadImage method

                            Error rendering macro 'deck'

                            java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                            Get the attachment list from the issue

                              JSON
                              CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                                  NSMutableURLRequest *attachmentsRequest;
                                  attachmentsRequest = [[NSMutableURLRequest alloc] init];
                              
                                  NSString *urlStringForIssue = [NSString stringWithFormat:@"%@%@/issues/%@/attachments",
                                                                 [CSS getDefaultAPIURL],
                                                                 [CSS getSlug],
                                                                 issueid];
                                  DLog(@"%@",urlStringForIssue);
                                  [attachmentsRequest setURL:[NSURL URLWithString:urlStringForIssue]];
                                  [attachmentsRequest setHTTPMethod:@"GET"];
                                  [attachmentsRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
                                  [attachmentsRequest setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
                              
                                  NSHTTPURLResponse *responseHTTPForAttachments;
                                  NSError *error;
                              
                                  NSData *rawAttachmentsList = [NSURLConnection sendSynchronousRequest:attachmentsRequest returningResponse:&responseHTTPForAttachments error:&error];
                                  [attachmentsRequest release];
                              
                                  if ([responseHTTPForAttachments statusCode] == 200) {
                                      NSMutableArray *attachmentsList = [NSJSONSerialization JSONObjectWithData:rawAttachmentsList options:NSJSONReadingMutableContainers error:&error];
                                      if ([attachmentsList count] > 0) {
                                          return attachmentsList;
                                      }else{
                                          return NULL;
                                      }
                                  }else{
                                      return NULL;
                                  }
                              

                              Error rendering macro 'deck'

                              java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null


                              Upload image utility method for ObjectiveC

                                JSON
                                - (BOOL)uploadImage:(UIImage*)image withExtension:(NSString*)ext withFileName:(NSString*)fileName ToURLString:(NSString*)urlString{
                                
                                    CommunicationSingleton *CSS = [CommunicationSingleton sharedSingleton];
                                    NSURL *url = [NSURL URLWithString:urlString];
                                    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
                                    // Method
                                    [request setHTTPMethod:@"POST"];
                                
                                    // Set headers
                                    NSString *boundary = @"AaB03x";
                                    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
                                
                                    [request setValue:[CSS getAuthorization] forHTTPHeaderField:@"Authorization"];
                                    [request addValue:contentType forHTTPHeaderField:@"Content-Type"];
                                
                                    // FORM
                                    NSData *dataForTestImage = UIImageJPEGRepresentation(image, 1.0);
                                    NSMutableData *body = [NSMutableData data];
                                
                                    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                                    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@.%@\"\r\n", fileName,ext] dataUsingEncoding:NSUTF8StringEncoding]];
                                    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
                                    [body appendData:dataForTestImage];
                                
                                    // fileName
                                    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                                    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"fileName\"\r\n\r\n%@.%@", fileName,ext] dataUsingEncoding:NSUTF8StringEncoding]];
                                
                                    // type
                                    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                                    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"type\"\r\n\r\nimage/%@", ext] dataUsingEncoding:NSUTF8StringEncoding]];
                                
                                    // size
                                    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                                    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"size\"\r\n\r\n%d", [dataForTestImage length]] dataUsingEncoding:NSUTF8StringEncoding]];
                                
                                
                                    // objectIds
                                    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                                    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"objectIds\"\r\n\r\n%@", @""]
                                dataUsingEncoding:NSUTF8StringEncoding]];
                                
                                    // End
                                    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                                
                                    [request setHTTPBody:body];
                                
                                    NSHTTPURLResponse* response;
                                    NSError* err;
                                    [NSURLConnection sendSynchronousRequest:request
                                                          returningResponse:&response
                                                                      error:&err];
                                
                                    if ([response statusCode] == 201) {
                                        return true;
                                    }else{
                                        return false;
                                    }
                                }
                                
                                

                                Error rendering macro 'deck'

                                java.lang.NullPointerException: Cannot invoke "String.replace(java.lang.CharSequence, java.lang.CharSequence)" because the return value of "net.customware.confluence.plugin.composition.bean.Deck.getId()" is null

                                • No labels