Wednesday, August 23, 2017

How to check if I have write permissions to an Oracle table

SELECT CASE WHEN COUNT(*) > 0 THEN 'YES' ELSE 'NO' END AS PERMISSIONS FROM (
SELECT privilege FROM (
select * from dba_tab_privs  
where (grantee = 'MY_USER_NAME' or grantee in (select granted_role from dba_role_privs
connect by prior granted_role = grantee start with grantee = 'MY_USER_NAME') )
and owner = 'THE_OWNER'
and table_name = 'THE_TABLE' and privilege = 'UPDATE'
) 
UNION
SELECT PRIVILEGE FROM (
select * from dba_sys_privs  where grantee = 'MY_USER_NAME' or grantee in (select granted_role from dba_role_privs 
connect by prior granted_role = grantee start with grantee = 'MY_USER_NAME') 
) where privilege like '%UPDATE%'
);

Saving here in case ostensibly duplicate question at S.O. is deleted.

Sunday, December 20, 2015

Insertion Sort Code with Comments

Code showing state progress of insertion sort based on Ajax: The Definitive Guide O'Reilly 2008 p 267
package sort;

public class InsertionSort {

 public static void main(String[] args) {
  int[] nums = new int[] {9, 5, 3, 7, 3};
  int[] res = new InsertionSort().insertionSort(nums);
  printState(res, "  the end", true);

 }

 public int[] insertionSort(int[] dataArray) {
  int j, index;
  
  for (int i = 0, il = dataArray.length; i < il; i++) {
   index = dataArray[i];
   j = i;
   printState(dataArray, "  ...before while: i=" + i + ", j="+j, false);
   if (j == 0) {
    System.out.println(" j==0 ");
   } else {
    System.out.println(" ...comparing " + dataArray[j - 1] + " > " + index);
   }
   while ((j > 0) && (dataArray[j - 1] > index)) {
    dataArray[j] = dataArray[j - 1];
    printState(dataArray, "  ...in while: i=" + i + ", j="+j, false);
    j -= 1;
    if (j == 0) {
     System.out.println(" j==0 ");
    } else {
     System.out.println(" ...comparing " + dataArray[j - 1] + " > " + index);
    }
   }
   dataArray[j] = index;
   printState(dataArray, "  ...after while: i=" + i + ", j="+j, true);
  }
  return (dataArray);
 }

 private static void printState(int[] res, String msg, boolean endLine) {
  for (int i =0, j=res.length; i < j; i++) {
   System.out.print(res[i] + ((i<j-1)? ", ":""));
  }
  
  if (endLine)
   System.out.println(msg);
  else
   System.out.print(msg);
 }
 

}

Output:
9, 5, 3, 7, 3  ...before while: i=0, j=0 j==0 
9, 5, 3, 7, 3  ...after while: i=0, j=0
9, 5, 3, 7, 3  ...before while: i=1, j=1 ...comparing 9 > 5
9, 9, 3, 7, 3  ...in while: i=1, j=1 j==0 
5, 9, 3, 7, 3  ...after while: i=1, j=0
5, 9, 3, 7, 3  ...before while: i=2, j=2 ...comparing 9 > 3
5, 9, 9, 7, 3  ...in while: i=2, j=2 ...comparing 5 > 3
5, 5, 9, 7, 3  ...in while: i=2, j=1 j==0 
3, 5, 9, 7, 3  ...after while: i=2, j=0
3, 5, 9, 7, 3  ...before while: i=3, j=3 ...comparing 9 > 7
3, 5, 9, 9, 3  ...in while: i=3, j=3 ...comparing 5 > 7
3, 5, 7, 9, 3  ...after while: i=3, j=2
3, 5, 7, 9, 3  ...before while: i=4, j=4 ...comparing 9 > 3
3, 5, 7, 9, 9  ...in while: i=4, j=4 ...comparing 7 > 3
3, 5, 7, 7, 9  ...in while: i=4, j=3 ...comparing 5 > 3
3, 5, 5, 7, 9  ...in while: i=4, j=2 ...comparing 3 > 3
3, 3, 5, 7, 9  ...after while: i=4, j=1
3, 3, 5, 7, 9  the end

Friday, July 25, 2014

ModelMapper Generic Spring Integration

The Spring integration provided by ModelMapper (http://modelmapper.org/user-manual/spring-integration/) as of now could be enhanced as below in order to provide capability to pass in a delegate interface to use during setup:

package ...;

import org.modelmapper.Provider;
import org.modelmapper.Provider.ProvisionRequest;
import org.modelmapper.internal.util.Assert;
import org.springframework.beans.factory.BeanFactory;

public class EnhancedModelMapperSpringIntegration {
 private static class SpringProvider<S, D> implements
   Provider<D> {
  BeanFactory beanFactory;
  SourceBeanFactoryMapper<S, D> sourceBeanFactoryMapper;

  SpringProvider(BeanFactory beanFactory, SourceBeanFactoryMapper<S, D> sourceBeanFactoryMapper) {
   this.beanFactory = beanFactory;
   this.sourceBeanFactoryMapper = sourceBeanFactoryMapper;
  }

  @Override
  public D get(ProvisionRequest<D> request) {
   return sourceBeanFactoryMapper.map((S)request.getSource(), beanFactory);
  }
 }

 public static <S, D> Provider<?> fromSpring(BeanFactory beanFactory, SourceBeanFactoryMapper<S, D> sourceBeanFactoryMapper) {
  Assert.notNull(beanFactory);
  return new SpringProvider(beanFactory, sourceBeanFactoryMapper);
 }

}


package ...;

import org.springframework.beans.factory.BeanFactory;

public interface SourceBeanFactoryMapper<S, D> {

 D map(S s, BeanFactory beanFactory);

}

Wednesday, January 15, 2014

SQL Server to Oracle DDL BeanShell Script

I couldn't find any script to convert a relatively large SQL Server Database (just tables) to Oracle SQL DDL in a way that all the identifiers (table names, column names, constraint names) were reduced to Oracle's max of 30 characters. So I came up with the following. The original identifiers had underscores to separate words, the script choose the last or second to last underscore-separated word and appends a number for uniqueness. Run in jEdit.


// This is a jEdit macro
// only run once on output of SQL Server Generate Scripts wizard with
// all options set False other than Script -Create, -USE DATABASE, -Foreign Keys, -Primary Keys
// Save as .bsh and place in %AppData%/jEdit/macros

import java.util.regex.*;

SearchAndReplace.setSearchString("\\[(.+?)\\]");
SearchAndReplace.setReplaceString("$1");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(true);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("varchar(max)");
SearchAndReplace.setReplaceString("CLOB");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("(\\s)ASC(\\b)");
SearchAndReplace.setReplaceString("$1$2");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(true);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("SET ANSI_NULLS ON\\nGO\\nSET QUOTED_IDENTIFIER ON\\nGO\\n");
SearchAndReplace.setReplaceString("");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(true);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("GO");
SearchAndReplace.setReplaceString(";");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("WITH \\([^\\)]+\\)");
SearchAndReplace.setReplaceString("");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(true);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("CLUSTERED");
SearchAndReplace.setReplaceString("");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
SearchAndReplace.setSearchString(" ON PRIMARY");
SearchAndReplace.setReplaceString("");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
SearchAndReplace.setSearchString(" WITH CHECK");
SearchAndReplace.setReplaceString("");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
SearchAndReplace.setSearchString("tinyint");
SearchAndReplace.setReplaceString("int");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(false);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

SearchAndReplace.setSearchString("ALTER TABLE .+? CHECK CONSTRAINT .+?\\n.+?\\n");
SearchAndReplace.setReplaceString("");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setWholeWord(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(true);
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);

String text = textArea.getText();
String pattern = "ADD\\s+CONSTRAINT FK_\\w+?\\sFOREIGN KEY";
Matcher matcher = Pattern.compile(pattern).matcher(text);
StringBuffer sb = new StringBuffer();
int i = 1;
while (matcher.find()) {
 matcher.appendReplacement(sb, "ADD CONSTRAINT FK_" + (i++) + " FOREIGN KEY");
}
matcher.appendTail(sb);

text = sb.toString();

pattern = "CREATE\\s+TABLE (\\w+?)\\(";
matcher = Pattern.compile(pattern).matcher(text);
int i = 1;
ArrayList toReplace = new ArrayList();
ArrayList replacements = new ArrayList();
while (matcher.find()) {
 if (matcher.group(1).length() >= 30) {
  String[] split =  matcher.group(1).split("_");
  int splitIndex = split.length-2 < 0 ? 0 : split.length-2;
  String replacement = split[splitIndex] + (i++);
  toReplace.add(matcher.group(1));
  replacements.add(replacement);
 }
}
for (int j = 0; j < toReplace.size(); j++) {
 text = text.replaceAll(toReplace.get(j), replacements.get(j));
}

pattern = "\\W(\\w+?)\\sint\\sNOT\\sNULL";
matcher = Pattern.compile(pattern).matcher(text);
i = 1;
toReplace = new ArrayList();
replacements = new ArrayList();
while (matcher.find()) {
 if (matcher.group(1).length() >= 30) {
  String[] split =  matcher.group(1).split("_");
  int splitIndex = split.length-1 < 0 ? 0 : split.length-1;
  String replacement = split[splitIndex] + (i++);
  toReplace.add(matcher.group(1));
  replacements.add(replacement);
 }
}
for (int j = 0; j < toReplace.size(); j++) {
 text = text.replaceAll(toReplace.get(j), replacements.get(j));
}

textArea.setText(text);


Monday, October 22, 2012

Sample PowerShell .wsp Install Script


Function EndPause {
    Write-Host "Press any key to continue ..."

    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}

$x = [System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)

$siteUrlDev = "http://devsite/testsite/"
$siteUrlStg = "http://stgsite/testsite/"
$siteUrlProd = "http://prodsite/testsite/"

Try
{
$spSite =  new-object Microsoft.SharePoint.SPSite($siteUrlStg) 
}
Catch {}
Try
{
$spSite =  new-object Microsoft.SharePoint.SPSite($siteUrlDev) 
}
Catch {}
Try
{
$spSite =  new-object Microsoft.SharePoint.SPSite($siteUrlProd) 
}
Catch {}
if ($spSite -eq $null)
{ 
    "ERROR ------------ Site not found. Quitting."
    EndPause
    exit
}

$spWeb = $spSite.OpenWeb()

$spList = $spWeb.Lists["ListName"]

if ($spList -eq $null)
{
    "ERROR -------- ListName list not found. Quitting"
    EndPause
    exit
}
else
{
    {ListName list found}
}
If (!$spList.Fields.ContainsField("newdatefield"))
{ 
    # $spList.Fields.Add("test","DateTime",0) 
    $dateField = $spList.Fields.CreateNewField("DateTime","newdatefield")
    $dateField.DisplayFormat = [Microsoft.SharePoint.SPDateTimeFieldFormatType]::DateOnly
    $dateField.Required = $false;
    $spList.Fields.Add($dateField)
    "Added newdatefield field"    
}
else
{
    "newdatefield field already added. This is fine."
}

if (Test-Path ("MySPApp.wsp"))
{
    Set-Alias -Name stsadm -Value $env:CommonProgramFiles"\Microsoft Shared\Web Server Extensions\12\BIN\STSADM.EXE"
    
    Write-Host "Upgrading solution to 9.0.1" -foregroundcolor green
    &stsadm -o upgradesolution -name "MySPApp.wsp"  -filename "MySPApp.wsp" -immediate -allowGacDeployment -allowCasPolicies

    &stsadm -o execadmsvcjobs
}
else
{
    "MySPApp.wsp file missing. Quitting"
    EndPause
    exit
}
EndPause


Friday, September 28, 2012

Printing Paginated HTML Page

Update: To just prevent new page on TR breaks add the following style (Note the DOCTYPE!): <!DOCTYPE html> <!-- saved from url=(0016)http://localhost --> <html><head> <style type="text/css"> @media print { tr {page-break-inside:avoid} } </style>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<style type="text/css">
/*@media screen print 'print' not working for print preview
{
}*/
table.splitForPrint { width:681 ; /*assuming 816px for Letter size minus 1.5in margin or approx 135px*/
   border: solid 1px #000000;border-bottom: 0; /*turn off bottom since last 
row will have bottom border*/border-collapse: collapse;
font-family: sans-serif;font-style: normal;
font-weight: normal;font-size: 12px;
   }

table.splitForPrint td {width:227/*Must divide total width by columns*/; border-bottom: solid 1px #000000;padding:4px;}
table.splitForPrint th {border-bottom: solid 1px #000000; background-color: "AliceBlue";padding:4px;}
</style>

<script src="jquery-1.7.1.min.js"></script>
<script type="text/javascript">
//adapted from http://code.google.com/p/wkhtmltopdf/issues/detail?id=168
 $(document).ready(function () {

  $('table.splitForPrint').each(function(i, tabela){ //  this to set 'this' context to table

   var trlength = $('tbody tr', tabela).length;
   //850:assuming 8.85 in. reserved for tbl height based on 96DPI(http://auctionrepair.com/pixels.html)
   var maxtrpxperpage = 950;
   var trsleft = trlength;
   var pageno = 1;
   var ultimo = $(tabela); //$('table.splitForPrint').first();
   while (trsleft > 0) {

    var copy = ultimo.clone();
    var debugmessage = "<br>starting while loop<br>";

    var numtrsremovedfromcurrent = 0;
    var curtrscount = $('tbody tr', copy).length;
    var curtbltrscount = 0;

    //get in reverse order
    $($('tbody tr', ultimo).get().reverse()).each(function(i, tr){

     if (ultimo.height() > maxtrpxperpage)
     {
      $(tr).remove();
      numtrsremovedfromcurrent++;
     }
     else
     {
      return false;
     }

    });
    curtbltrscount = curtrscount - numtrsremovedfromcurrent;
    $('tbody tr', copy).each(function(i, tr){
     if (i < curtbltrscount) {
      $(tr).remove();
     }
    });

    if (copy.find("td").length > 0) //don't insert a table with only a header
    {
     copy.insertAfter(ultimo);
     $("<div style='page-break-before:always'>Page " + (++pageno) + "</div>").insertAfter(ultimo);

 /*   var heights = $.map( ultimo.find("tr"), function(el){ return $(el).outerHeight() + "|"
    + $(el).find("td").eq(1).text()
    + "/" + $(el).find("td").height()
    }).join(", ");
    $("<div style='font-family: sans-serif;font-size:15px;page-break-before:always'>blosah" + trlength
    + ", heights: " + heights
    + "<br>debugmsg: " + debugmessage
    + "--trs:" + ultimo.find("tr").length + "; window height: " + $(window).height()
    + "; document height: " + $(document).height()
    + "; table height: " + ultimo.height()
    + "; table width: " + ultimo.width()
    + "</div>").insertAfter(ultimo);
 */
    }
    //copy.css('page-break-before', 'always');

    ultimo = copy;

    trsleft -= curtbltrscount;
   }
  });
 });


</script>
</head>
<body>
<table  class="splitForPrint" ><thead><tr><th>Header1###<th>Header2</th><th>Another header here</th></tr></thead>

<tbody>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
<tr>
<td>HDK      0   ksdTkskdjf      Yte</td>
<td>Hkekrulc=kS kdkurlkREK TSDNBKS LEKFLS =58349</td>
<td>TyikmeskkVkslkjdsk ^ YIE</td>
</tr>
<tr>
<td>Vaslkjds</td>
<td>Xdk ks</td>
<td>LE,X</td>
</tr>
<tr>
<td>TT EESE23 4443</td>
<td>TIE     -;Nksj kerkdVkm</td>
<td>Ekjs dksk TkdskX W5 TOI DKSJDFDKSLK DKSLK32</td>
</tr>
</tbody></table>
</body>

Monday, August 20, 2012

Multi-App WSP Install.bat

@echo Deploy my.package.wsp
:usage - install.bat url1 url2 ...
@echo off

if "%1" == "" goto NoInputErrorMessage

setlocal

set SPAdminTool=%CommonProgramFiles%\Microsoft Shared\web server extensions\12\BIN\stsadm.exe

@echo on

"%SPAdminTool%" -o addsolution -filename my.package.wsp
"%SPAdminTool%" -o execadmsvcjobs
"%SPAdminTool%" -o deploysolution -name "my.package.wsp" -immediate  -allowGacDeployment -allowCasPolicies -force
"%SPAdminTool%" -o execadmsvcjobs

@echo off
:LOOP
IF "X%1" == "X" GOTO LOOPDONE
echo Deploying solution to %1
@echo on
"%SPAdminTool%" -o activatefeature -name myappfeature -url %1
@echo off
SHIFT
GOTO LOOP
:LOOPDONE

pause
echo The batch file is complete.
GOTO ENDFINAL

:NoInputErrorMessage
@ECHO Please enter these arguments: Application URLs separated by spaces
@echo Sample command: Install.bat https://myapp1 https://myapp2
:ENDFINAL